Newsgroup: it.comp.www.php
Titolo: problema incomprensibile con le accentate...

nel gestionale che ho appena finito, viene salvato un campo con il titolo 
del libro che si sta catalogando.
c'è poi un motore di ricerca che permette di impostare la chiave di ricerca 
e lo script restituisce tutti i titoli presenti nel database con la chiave 
desiderata.
il problema è questo: il cliente mi ha chiesto che sia possibile ottenere 
come risultato sia i titoli con dentro la parola ricercata, sia quelli con 
le sue eventuali vocali accentate. faccio un esempio: immaginiamo che nel 
database siano salvati due titoli:
città
citta
uno con la a accentata e uno senza.
mettendo come chiave "citta" devono saltar fuori entrambi.
io gli ho risposto che questo non era possibile in quanto sono due lettere 
diverse. e infatti secondo lo standard ascii sono due lettere diverse.
poi, per curiosità, ho provato cosa succede.
in pratica, ho salvato nel database un titolo di esempio:
"perchè"
e salta fuori come risultato quel titolo sia che io metta "perchè", sia che 
io mettà "perché" sia che io metta "perche"
in pratica, lo script fa, senza volerlo, quello che vorrebbe il cliente, 
mentre invece dovrebbe rispondere come risultato solo quello che 
effettivamente io gli ho chiesto.
posto che la cosa mi fa felicissimo perchè involontariamente risolve un 
problema del cliente, qualcuno mi sa spiegare come mai?
giusto per informazione, il database è mysql e i titoli vengono salvati in 
un campo di tipo varchar e lunghezza 200, mentre questa è l'istruzione che 
lo script usa per la ricerca:
$query=mysql_query("SELECT * FROM titoli WHERE titolo LIKE '%$titolo%'"); 

[CUT]
La stessa cosa è capitata anche a me .. impostando tutto in UTF8 ;) e
sarei curioso di sapere il motivo .. mi sa che andrò a spulciarmi la
documentazione di php/mysql per capirlo ;)
--
[CapoBecchino]
msn: capobecchino |[@]| hotmail |[.]| com
Defecatio matutina bona quantum medicina. Defecatio meridiana neque
bona, neque sana.

 ha scritto nel messaggio
news:1174037536.6...@b75g2000hsg.googlegroups.com...
[CUT]
La stessa cosa è capitata anche a me .. impostando tutto in UTF8 ;) e
sarei curioso di sapere il motivo .. mi sa che andrò a spulciarmi la
documentazione di php/mysql per capirlo ;)
soundex mysql, a sto punto


 $query=mysql_query("SELECT * FROM titoli WHERE titolo LIKE '%$titolo%'");
aggiungi un campo per la ricerca, dove le accentate le inserisci senza
accento, e fai la ricerca su quello:
$query=mysql_query("SELECT * FROM titoli WHERE titolo_no_accenti LIKE
'%$titolo%'");
(se la versione di mysql e' ababstanza recente, dovresti riuscire a
tenerlo allineato tramite trigger)

 accento, e fai la ricerca su quello: ...
mi sa che hai letto troppo in fretta il post. ;-D
il 'problema' comunque è un non-problema. :P nel senso che il tipo di
confronto tra caratteri dipende dalla *collation* specificata.
una collation non è altro che un insieme di regole che definisce il
risultato di un confronto tra i simboli del set di caratteri.
in genere, la differenza più grande è tra collation case sensistive e
insensitive. se non vado errato, per avere il risultato NON voluto dal
cliente (e la cosa è *necessaria* se si ha a che fare con le chiavi
primarie, ad esempio), bisogna usare la collation utf8_bin.
Per maggiori informazioni, pagina 777 di televideo oppure:
http://dev.mysql.com/doc/refman/5.1/en/charset-general.html
http://dev.mysql.com/doc/refman/5.1/en/charset-collate.html
Ciao ;o)
Maverick
-- 
«Che non siete più liberi di non avere una casa con letto per dormire.
 Lavorate voi - schiavi dei soldi - che non sentite la puzza della
 schiavitù!» (a Mario di Monte Mario, Roma) # 
http://libre.netsons.org/

Grazie mille Maverick!!!