• User

    Replace di lettere accentate

    Salve a tutti,

    ho trovato diverse discussioni in merito a questo argomento, ma a causa delle mie insufficienti conoscenze in materia non sono in grado di risolvere il mio problema.

    Io utilizzo il codice seguente per visualizzare in un widget su tutte le pagine del sito le ultime discussioni aperte sul forum, premetto che il sito e in wordpress, il forum in phpbb e si trovano su due database differenti ma collegati da un bridge.

    Il problema è che quando mi trovo sulle pagine del blog le lettere accentate vengono sostituite dal simbolo �, mentre quando mi trovo sulle pagine del forum questo non avviene e le lettere accentate vengono visualizzate correttamente.

    Secondo voi potrebbe essere utilizzata la funzione replace per ovviare a questo problema? Eventualmente qualcuno sarebbe così gentile da aiutarmi ad integrare la funzione?

    Grazie mille a tutti,
    Antonio

    [PHP]<ul><?
    include('...');
    $connessione = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");

        if (!$connessione) {
            echo "Impossibile connettersi al DB: " . mysql_error();
            exit;
        }
    
        if (!mysql_select_db("$dbname")) {
            echo "Impossibile selezioanare database: " . mysql_error();
            exit;
        }
    
        $query = "SELECT topic_id,forum_id,topic_last_post_id,topic_last_post_time, topic_title, topic_last_poster_name, topic_last_poster_colour
                FROM   phpbb_topics
             ORDER BY topic_last_post_time DESC LIMIT 0,3";
    
        $risultato = mysql_query($query);
    
        if (!$risultato) {
            echo "Fallimento nell'esecuzione della query ($query) dal DB: " . mysql_error();
            exit;
        }
    
        if (mysql_num_rows($risultato) == 0) {
            echo "Nessuna riga trovata, niente da stampare quindi si esce";
            exit;
        }
    
        while ($dati = mysql_fetch_assoc($risultato)) {
            echo "<li><b><a href='...?f=$dati[forum_id]&t=$dati[topic_id]#p$dati[topic_last_post_id]' target=\"_parent\">$dati[topic_title]</a></b> 
          Inviato da <a href='...?mode=viewprofile&un=$dati[topic_last_poster_name]' target=\"_parent\"><b>$dati[topic_last_poster_name]</b></a>, il " . date("j/n/Y", $dati[topic_last_post_time]) . "</li>";
    
        }
    
        mysql_free_result($risultato);
    

    ?></ul>[/PHP]


  • ModSenior

    Ciao butred77,
    devi modificare la codifica mediante il metatag della pagina, se non è già impostata correttamente.


  • User

    Grazie per la risposta, nel metatag del forum è impostata la codifica in questo modo se ho capito bene

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

    La stessa cosa ho fatto nel blog ma non va... ecco perchè vorrei provare con il replace direttamente nella funzione php...

    Non sono convinto che sia la giusta soluzione, ma non conosco altre vie.


  • ModSenior

    Il replace al massimo dovresti farlo prima di salvare sul database.
    Ma invece di fare questo genere di cosa, sarebbe meglio risolvere il problema nella maniera corretta, intanto verifica che le tabelle ed i campi delle stesse abbiano come codifica utf-8.
    Se sono impostati correttamente sarà colpa della connessione al database, ed è sufficiente eseguire questa query:

    
    
    SET NAMES UTF8;
    

    Dopo la connessione, nel tuo script php.


  • User

    Grazie mille....!!

    ho risolto impostando [PHP]mysql_query("SET CHARACTER SET 'utf8'"); [/PHP]

    Ti sono veramente grato e soprattutto grazie per non avermi fatto il "dettato" della soluzione così ho dovuto studiarmi la funzione e replicarla nel mio caso 😉

    La soluzione l'ho trovata qui: php .net/ manual/ en/ function.mysql-client-encoding .php

    La funzione corretta è la seguente, spero possa servire ad altri:

    [PHP]<ul><?
    include('PATH ASSOLUTA AL FILE CONFIG.PHP DEL FORUM');
    $connessione = mysql_connect("$dbhost", "$dbuser", "$dbpasswd");
    mysql_query("SET CHARACTER SET 'utf8'");

        if (!$connessione) {
            echo "Impossibile connettersi al DB: " . mysql_error();
            exit;
        }
    
        if (!mysql_select_db("$dbname")) {
            echo "Impossibile selezioanare database: " . mysql_error();
            exit;
        }
    
        $query = "SELECT topic_id,forum_id,topic_last_post_id,topic_last_post_time, topic_title, topic_last_poster_name, topic_last_poster_colour
                FROM   phpbb_topics
             ORDER BY topic_last_post_time DESC LIMIT 0,3";
    
        $risultato = mysql_query($query);
    
        if (!$risultato) {
            echo "Fallimento nell'esecuzione della query ($query) dal DB: " . mysql_error();
            exit;
        }
    
        if (mysql_num_rows($risultato) == 0) {
            echo "Nessuna riga trovata, niente da stampare quindi si esce";
            exit;
        }
    
        while ($dati = mysql_fetch_assoc($risultato)) {
            echo "<li><b><a href='URL ALLA CARTELLA DEL FORUM?f=$dati[forum_id]&t=$dati[topic_id]#p$dati[topic_last_post_id]' target=\"_parent\">$dati[topic_title]</a></b> 
          Inviato da <a href='URL ALLA CARTELLA DEL FORUM?mode=viewprofile&un=$dati[topic_last_poster_name]' target=\"_parent\"><b>$dati[topic_last_poster_name]</b></a>, il " . date("j/n/Y", $dati[topic_last_post_time]) . "</li>";
    
        }
    
        mysql_free_result($risultato);
    

    ?></ul>[/PHP]