Gestione caratteri Arabi con PHP - MySql

Salve,

sto cercando di visualizzare tramite PHP delle colonne di una tabella MySql che contengono dei caratteri in lingua araba. Purtroppo nel visualizzarli ottengo sempre una serie di punti interrogativi a video.

il codice che uso per la select è il seguente:

<?php
// ......
$rst= $CNN_CONNECTION->query("select NAME from accounts where ID='01'");

$row=$rst->fetch_row();
$ret= $row[0];
$rst->close();
//.....
?>

Ho provato anche con $ret= utf8_decode($row[0]); e  $ret= htmlspecialchar($row[0]);, ma sempre con lo stesso esito.

Visualizzando la tabella con phpmyadmin o con "MySQL Query Browser" i caratteri appaiono correttamente, questo mi conferma che sto usando la collation giusta di MySql, ed una corretta configurazione del php.ini... però evidentemente manca qualcos'altro!

Qualcuno sa darmi qualche consiglio???

Grazie mille,

Cranos

inviato 10 anni fa
cranos
X 0 X

Quindi il problema della visualizzazione dei caratteri arabi si verifica nel browser?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Sì i caratteri non vengono correttamente visualizzati nel browser... ho usato sia IE che Firefox.

Però usando phpMyAdmin (sia 2.6.3 che 2.7.0), da entrambi i browser, si vedono correttamente i caratteri.

risposto 10 anni fa
cranos
X 0 X

Allora il problema è di facile risuoluzione. Controlla il set di caratteri che sta usando MySQL per la tabella in questione. Puoi farlo con un:

show create table nome_tabella

Molto probabilmente sta usando l'utf8. In questo caso ti basta aggiungere alla tua pagina HTML un meta tag che espliciti il set di caratteri usato. Nel caso dell'utf8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni,

ho provato il tuo consiglio... purtroppo però la situazione non cambia, vengono sempre restituiti i punti interrogativi al posto dei caratteri arabi.

Ho creato la tabella con la seguente DDL:

CREATE TABLE `test` (
`ID` int(11) NOT NULL auto_increment,
`NAME` varchar(255) NOT NULL default '',
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Ho poi utilizzato il codice seguente per la visualizzazione:

<?php

$CNN_CONNECTION = mysqli_connect("localhost", "usr", "pwd", "dbname");
?>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<TITLE>TEST</TITLE>
</HEAD>

<BODY topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
|
<?php
$rst= $CNN_CONNECTION->query("select NAME from test where ID=1");
        $row=$rst->fetch_row();
$ret= $row[0];
echo $ret;
?>|
</BODY>
</HTML>

Anche qui ho provato sia con echo utf8_decode($ret); che con  echo htmlspecialchars($ret); ... ma senza alcun cambiamento :'( .

Qualche idea?!?! 

Grazie

risposto 10 anni fa
cranos
X 0 X

appena dopo la connessione prova a lanciare queste query:

Set character_set_connection=utf8

Set character_set_results=utf8

Set character_set_client=utf8

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

PERFETTO funziona!!!  O0

Grazie mille.

 :D :bye:

risposto 10 anni fa
cranos
X 0 X

Allora ti conviene modificare il file di configurazione di MySQL in modo da impostare questi set di caratteri come default per tutte le connessioni. Non vale la pena fare 3 query ad ogni pagina...

Controlla nella documentazione ufficiale di MySQL come fare.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda