|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
[PHP] problema charset
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? ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2006
Città: ~
Messaggi: 146
|
__________________
Computers are like conditioned air: they work fine 'till you open windows. ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
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 ?. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2006
Città: ~
Messaggi: 146
|
Per MySQL c'è la comodissima mysql_escape_string.
Occhio però che non fa l'escape dei caratteri % e _
__________________
Computers are like conditioned air: they work fine 'till you open windows. ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
Niente da fare, il ° non viene toccato, nella tabella rimane come punto ?
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Sep 2006
Città: ~
Messaggi: 146
|
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 ![]()
__________________
Computers are like conditioned air: they work fine 'till you open windows. ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
grazie!!!
![]() |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Sep 2006
Città: ~
Messaggi: 146
|
Con questo codice (abbastanza classico) a me non da problemi con nessuno dei caratteri che ho provato (incluso °):
Codice:
$query="INSERT INTO try (campo1, campo2) VALUES (2,'".mysql_escape_string($_POST['value'])."')"; mysql_query($query);
__________________
Computers are like conditioned air: they work fine 'till you open windows. ![]() |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
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! ![]() 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...) |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Sep 2006
Città: ~
Messaggi: 146
|
Ottimo
![]()
__________________
Computers are like conditioned air: they work fine 'till you open windows. ![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
Torno sempre sull'argomento...
![]() 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... ![]() 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... |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 501
|
Penso di aver risolto, quindi mi rispondo da solo
![]() 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... ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:47.