• User Attivo

    Strano problema accenti

    Ciao a tutti, ho uno strano problema con la codifica delle lettere accentate all'interno di una funzione.

    Ho creato questa funzione che mi genera un un testo decente da convertire poi in un futuro url:
    [php]
    function easy_url($string){
    $find=array("à","è","ì","ò","ù");
    $replace=array("a","e","i","o","u");
    $string= strtr($string,array_combine($find, $replace));

        $string=strtolower($string);
    
    $string=preg_replace('/[^a-z0-9\x20]+/i',"",$string);
    $array=explode(" ", $string);
    $n=0;
    foreach($array as $value){
        if ($value=="") unset($array);
        $n++;
    }
        $string=implode("-",$array);
    return $string;
    

    }
    [/php]richiamo la funzione in questo modo:
    [php]$string= "à555 uu èè AA";
    echo easy_url($string);[/php]Per es, se il testo è: "Ciao mondo!" , mi diventa "ciao-mondo".
    Il testo "Oggi è Lunedì" diventa "oggi-e-lunedi".

    Il problema è che le lettare accentate vengono codifcate in modo strano, ma non nella stampa, proprio all'interno della funzione, già al settaggio di $find.
    Se invece di creare la funzione, io inserisco il codice presente in essa, direttamente nel punto della pagina dove mi serve generare il testo modificato, tutto funziona perfettamente.

    Per capirci, se all'interno della funzione scrivo
    echo $find[0];
    ottengo in output qualcosa di non identificabile, come se invece di scrivere "à", avessi scritto in chissà quale lingua...

    Se invece inserisco la porzione di codice nel punto che mi serve, senza creare una funzione apposta e decido di stampare $find[0], mi stampa correttamente la lettera accentata "à"....

    Spero di aver scritto in modo comprensibile l'assurdo problema e spero che qualcuno sia in grado di aiutarmi. Grassie in anticipo

    PS: il problema si verifica sia con default_charset settato a default, sia settato su utf-8... non so proprio dove sbattere la testa.


  • Consiglio Direttivo

    Ciao bazarop, credo sia proprio un problema d'interpretazione codifica propria della funzione, proverei così, mettendo qualche altro accorgimento:

    [php]<?
    function easy_url($string) {
    $string=strtolower($string); //ti consiglio di farlo preventivamente, diversamente non le convertiresti mai le maiscole accentate 😉
    $string=htmlentities($string); //trasformi tutti i caratteri sensibili in entità html
    $find=array("à","è","é","ì","ò","ù");
    $replace=array("a","e","e","i","o","u");
    $string=str_replace($find,$replace,$string);
    .......
    .......
    ?>[/php]
    Vedi se così cambia qualcosa. 🙂


  • User Attivo

    Purtroppo non va bene, con htmlentities mi vengono convertiti in html anche tutti i simboli e gli spazi, già ci avevo pensato purtroppo.

    Quando poi arrivo a[PHP]$string=preg_replace('/[^a-z0-9\x20]+/i',"",$string);
    [/PHP]
    ottengo una stringa assurda 😞

    Grazie mille comunque!


  • Consiglio Direttivo

    Uhm...:?

    Prova a "ripulire" prima le lettere, con una funzione a parte:
    [php]
    function clean($string) {
    $string=strtolower($string);
    $find=array("à","è","é","ì","ò","ù");
    $replace=array("a","e","e","i","o","u");
    $string=str_replace($find,$replace,$string);
    return($string);
    }

    function easy_url ($string) {
    $string=preg_replace('/[^a-z0-9\x20]+/i',"",$string);
    $array=explode(" ", $string);
    $n=0;
    foreach($array as $value){
    if ($value=="") unset($array);
    $n++;
    }
    $string=implode("-",$array);
    return $string;
    }[/php];)


  • User Attivo

    Entrambe le funzioni sono correte... sono riuscito a far andare tutte e 2 ma i problemi non sono finiti e le assurdità non finiscono qui...

    Ho creato 2 pagine identiche, una chiamata index.php e l'altra test2.php .... entrambe hanno incluso al loro interno 2 differenti pagine function.php situate nella medesima cartella, e con lo stesso codice al loro interno.

    Sottilineo il fatto che ho detto "stesso", ovvero ho effettuato copia e incolla per crearle.

    index.php non va, ma test2.php va... index.php, funziona solamente se includo al suo interno lo stesso function.php che ho incluso in test2.php...

    potete constatare qui:
    http: //www.jabbi.net/test/
    http: //www.jabbi.net/test2.php

    Ma entrambe le pagine function usate, sono IDENTICHE. ed il codice è il seguente:
    [php]<?php function easy_url($string){
    $find=array("à","è","ì","ò","ù");
    $replace=array("a","e","i","o","u");
    $string= strtr($string,array_combine($find, $replace));

        $string=strtolower($string);
    
    $string=preg_replace('/[^a-z0-9\x20]+/i',"",$string);
    $array=explode(" ", $string);
    $n=0;
    foreach($array as $value){
        if ($value=="") unset($array);
        $n++;
    }
        $string=implode("-",$array);
    return $string;
    

    }
    ?>[/php]Le pagine di test, sono identiche e di seguti potete vederne il codice:
    [php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link type="text/css" rel="stylesheet" href="style.css" />
    <title>Pagina di Test</title>
    </head>
    <body>
    <?php

    include ("function.php");
    $string="èè !!! bbB Ccc ììaa,arr %%%hhh";
    echo "La stringa in questione è:<br>$string";
    echo "<br><br>Versione uso la funzione <i>easy_url()</i> presente in questa pagina:<br><br>";
    echo easy_url($string);

    ?>

    </body>
    </htm[/php]Sembra uno scherzo.... ma io non so davvero capacitarmene... Attendo per piacere un qualche parere da esperti perchè proprio non so dove sbattere la testa 😞

    PS: mi sono accorto adesso che non ho troncato il tag html 😄 ma comunque il nocciolo della questione non cambia.


  • User Attivo

    Ho risolto, ho scoperto che alcuni file php sono codificati in ansi e altri sono codoficati utf-8 (non sto parlando di meta, ma proprio di codifica del codice)... il bloc notes li codificava in ansi e ricordifcando tutto in utf-8 funzionano entrambi.
    Grazie mille del tempo dedicatomi 🙂

    Adesso non mi rimane che controllare la codifica di tutte le pagine 😞


  • Consiglio Direttivo

    😄

    Ne hai imparata una in più, no? 😉

    Buon scripting!!! :ciauz: