Discussione:
Usare caratteri accentati con php, mysql e utf8
(troppo vecchio per rispondere)
joker197cinque
2009-11-08 10:46:35 UTC
Permalink
Sto cercando di fare un piccolo db utf-8 in mysql.

Per l'inserimento dati sto usando phpmyadmin e ho impostato la
collation in utf8_general_ci

Ho scritto una sola riga con un solo campo in questo modo: "PHP è
bello"

Sto leggendo ora da php in questa tabella in questo modo:

$campodb = $mysql_query ....
...
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
<?
echo($campodb);
?>

E a video vedo "PHP � bello"

Il browser si autoconfigura a encoding "UTF-8"

Inserendo invece del testo di prova IN CINESE, si vede perfettamente!!

Come posso usare correttamente i caratteri accentati con questa
configurazione ?

Grazie mille.
Luigi Rosa
2009-11-08 11:03:20 UTC
Permalink
Post by joker197cinque
Sto cercando di fare un piccolo db utf-8 in mysql.
Se non definisci l'encoding dopo aver aperto la connessione non va un tubo.

Ipotizzando che la tua variabile di connessione sia $db e ipotizzando che tu
utilizzi mysqli, il comando da dare appena dopo aver aperto la connesisone con
mysql e'

$db->set_charset('UTF8');



Ciao,
luigi
--
/
+--[Luigi Rosa]--
\

Creditors have much better memories than debtors.
joker197cinque
2009-11-08 11:33:30 UTC
Permalink
Post by Luigi Rosa
Se non definisci l'encoding dopo aver aperto la connessione non va un tubo.
Il cinese si vede perfettamente però.
Post by Luigi Rosa
Ipotizzando che la tua variabile di connessione sia $db e ipotizzando che tu
utilizzi mysqli, il comando da dare appena dopo aver aperto la connesisone con
mysql e'
$db->set_charset('UTF8');
Per la connessione sto usando:
$cn = mysql_connect("localhost","root", "pwd");

Per le query uso:
mysql_query("SET NAMES 'utf8';", $cn);

Come posso eseguire il tuo comando in questa situazione ?

Grazie.
Luigi Rosa
2009-11-08 11:44:03 UTC
Permalink
Post by joker197cinque
Come posso eseguire il tuo comando in questa situazione ?
L'hai gia' fatto. :(

Il META non ti assicura una codifica UTF8, prova a mettere questo comando PHP
prima di fare qualsiasi output:

header("Content-Type: text/html; charset=UTF-8");




Ciao,
luigi
--
/
+--[Luigi Rosa]--
\

It has just been discovered that research causes cancer in rats.
joker197cinque
2009-11-08 11:51:07 UTC
Permalink
Ho usato uno snippet di questo tipo:

$mysqli=new mysqli('localhost', 'root', 'pwd', 'mydb');
$mysqli->set_charset("utf8");
$mysqli->query("SET NAMES 'utf8'");
$q=$mysqli->query("select * from table");
while($r=$q->fetch_assoc()) {
print_r($r);
}

e funziona alla grande.

Ora dovrei ricodificare i pezzi di codice in cui uso mysql_query con
mysqli .... mi daresti una dritta ? :)

Grazie
Luigi Rosa
2009-11-08 15:04:05 UTC
Permalink
Post by joker197cinque
$mysqli=new mysqli('localhost', 'root', 'pwd', 'mydb');
$mysqli->set_charset("utf8");
$mysqli->query("SET NAMES 'utf8'");
$q=$mysqli->query("select * from table");
while($r=$q->fetch_assoc()) {
print_r($r);
}
e funziona alla grande.
C'e' comunque un errore. Com mysqli non devi fare SET NAMES perche' basta
set_charset()
Post by joker197cinque
Ora dovrei ricodificare i pezzi di codice in cui uso mysql_query con
mysqli .... mi daresti una dritta ? :)
E' abbastanza semplice.

Se usi il modello a oggetti, al posto del tuo
$cn = mysql_connect("localhost","root", "pwd");
fai un

$cn = new mysqli('localhost', 'root', 'pwd', 'mydb');


Da quel momento $cn e' l'oggetto del collegamento al tuo database, piu' o meno
come prima.

Le query le fai con $cn->query("...")

il tipico ciclo che fa una query e legge tutte le righe e'

$q = $vn->query("SELECT * FROM tabella");
while ($r = $q->fetch_array()) {
var_dump($r);
}


Ciao,
luigi
--
/
+--[Luigi Rosa]--
\

It is impossible for an optimist to be pleasantly surprised.
Loading...