PDA

View Full Version : [PHP] problema charset


Lim
31-10-2007, 08:09
Ho un problema con l'interfacciamento del DB in MySQL con PHP.
Esistono alcuni campi nel DB che hanno dei caratteri speciali (dell'alfabeto polacco e degli altri paesi europei). Nel DB ho risolto impostando come set di caratteri l'UTF8_bin, ma in PHP, al momento della query ho dei problemi di visualizzazione. I caratteri speciali vengono sostituiti con un ? o con altri caratteri. Ho già cercato in rete, ma non riesco a risolvere il problema, qualcuno ha un consiglio?:help:

thehuge
31-10-2007, 16:37
Prova con htmlentities (http://it.php.net/manual/it/function.htmlentities.php).
Se ti deovesse servire il cirillico puoi usare convert_cyr_string (http://it.php.net/manual/it/function.convert-cyr-string.php).

Lim
02-11-2007, 10:34
inoltre c'è anche il problema con i caratteri di escape come ',",\, e soprattutto °.

Il simbolo del grado mi sta dando moltissime noie, in PHP riesco a gestirlo, ma al momento di passarlo come parametro per una query MySQL, esso viene sempre sostituito con il ?.

thehuge
02-11-2007, 11:10
Per MySQL c'è la comodissima mysql_escape_string (http://www.php.net/manual/it/function.mysql-escape-string.php).
Occhio però che non fa l'escape dei caratteri % e _

Lim
02-11-2007, 11:18
Niente da fare, il ° non viene toccato, nella tabella rimane come punto ?

thehuge
02-11-2007, 11:39
Una soluzione veloce, valida solo se l'unica interfaccia al DB è il web, potrebbe essere l'uso dei caratteri speciali dell'HTML.
Nello specifico potresti usare &\#176; oppure &\deg; indifferentemente (senza \).

Per una soluzione più definitiva aspetta che cerco qualcosa :) .

Lim
02-11-2007, 11:46
grazie!!! ;)

thehuge
02-11-2007, 12:45
Nel frattempo ti consiglio una bella lettura di questo (http://www.phpwact.org/php/i18n/charsets) istruttivo documento sull'argomento.

thehuge
02-11-2007, 13:09
Con questo codice (abbastanza classico) a me non da problemi con nessuno dei caratteri che ho provato (incluso °):
$query="INSERT INTO try (campo1, campo2) VALUES (2,'".mysql_escape_string($_POST['value'])."')";

mysql_query($query);


Potresti postare il pezzo di codice incriminato?

Lim
02-11-2007, 13:17
insomma, ci sarebbe parecchio da postare...
Cmq penso di aver risolto con una cosa analoga alla tua, solo che sto usando htmlentities() all'interno della stringa da passare alla query, e sembra funzionare! :D

All'inizio non andava perchè lo usavo nel posto sbagliato (lo avevo inserito in una funzione, ma al suo interno non sembra funzionare, solo nella query va bene...)

thehuge
02-11-2007, 13:38
Ottimo :)

Lim
03-11-2007, 10:49
Torno sempre sull'argomento... :help:

Ora ho delle stringhe memorizzate nel DB in UTF8, ma alcune sono state rielaborate con htmlentities().
Utilizzando la codifica della pagina ISO-8859-1 queste stringhe vengono visualizzate perfettamente (se codifico la pagina con UTF8 no...:rolleyes: )

Comunque questo va bene. Il problema sono le altre stringhe che non sono passate per htmlentities e che hanno caratteri speciali (dell'alfabeto polacco, slovacco ecc...). Sia che scelga come codifica della pagina UTF8 o no, queste vengono visualizzate male. Ho provato con utf8decode(), ma niente da fare.

Allora sono andato a verificare le codifiche di tutte le stringhe della tabella, quelle che sono state elaborate con htmlentities sono ASCII, mentre le altre UTF8.

A prescindere da questo, sto controllando se tra le funzioni mbstring ci fosse qualcosa che faccia al caso mio, ma questa cosa della codifica mi sta facendo impazzire...

Lim
03-11-2007, 11:37
Penso di aver risolto, quindi mi rispondo da solo :p

Non avevo aggiunto nel file connessione.php che ho creato appositamente per gestire la connessione al DB, la riga mysql_query("SET NAMES utf8");.

Ora ottengo il comportamento atteso... :rolleyes: