Newsgroup: it.comp.www.php
Titolo: order ny con entità html

Ciao a tutti ho un problema con le entità presenti in un campo di una 
tabella mysql (utf-8) che voglio ordinare
i nomi infatti non sono in fila per parola come la leggiamo dopo la 
trasformazione con html_enities ma sono in fila in base alle entità
quindi:
più
pia
piadina
piano
ovvero il più che dovrebbe essere l'ultimo è invece il primo in quanto sulla 
tabella è scritto più
Come risolvo il problema?
Grazie 

 wrote:

Ma perchè non inserisci le parole accentate così come sono e usi la
codifica UTF-8 sia per il db che per l'html?
Max
-- 
http://www.maxori.it
L'Arte è la capacità di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

 --
?
Come dissi ieri lo farò al più presto se mi conviene veramente ma le voci 
acentate sono alcune migliaia siccome temo i pasticci ci vado piano e poi 
non tutte le parole che usano caratteri speciali sono semplicemente 
accentate ma molte usano consonanti sotto e/o sopra puntate (esse zeta) e 
altre con la tilde o lo slash
Se trasformo i valori della tabella a mano mi ci vuole un mese.
In automatico come dicevo temo i pasticci
In utimo temo che non cambi nulla perchè dalle prove fatte l'ordine di 
parole che contengono simboli diacririci è sbagliato:
Date un'occhiata ai simboli diacritici che usiamo:
http://www.iomla.net/dia.htm
Poi andate al vocabolario in questione che contiene le voci non 
perfettamente ordinate:
http://www.iomla.net/vocabolario.htm
 

 In automatico come dicevo temo i pasticci
Potresti recuperare i dati con una query e poi correggi l'array ottenuto
trasformando le stringhe in UTF-8, oppure con str_replace(), infine le
inserisci in un altro array ordinato con asort()


il vocabolario è in ajax e se provi a cliccare una lettera qualsiasi dal 
lato italiano per esempio la lettera p seguita dalla lettera i ajax mi 
ritorna mano a mano un array che ti mostro sotto forma di elenco il quale mi 
mette la parola più in testa.
Se indicizzo l'array non cambia nulla (giò provato da tempo) e da lato 
dialetto è peggio e ho dovuto toglire gran parte dei semboli che ti mostro 
poi in fase di traduzione 

 Come risolvo il problema?
Rimuovi gli accenti prima di ordinare oppure crei una funzione 
d'ordinamento che non tenga conto dell'accento.

 piano
Quando usi utf-8 in un Database devi anche impostare la collation 
corretta per ordinare i dati. Quella piu` "omnicomprensiva" dovrebbe 
essere utf8_general_ci.
Non credo funzioni per le lingue asiatiche. Per esempio in Giapponese il 
kanji 本 si legge Hon (o Bon o Pon) oppure Moto, in base a quello che 
viene dopo, quindi 本 = Hon (Libro) viene prima di 本屋 = Honya (Libreria), 
che a sua volta viene prima di 本 = Moto (Origine).
In questo caso dovresti memorizzare in DB anche la traslitterazione in 
hiragana e katakana, e ordinare su quella.
Non so come funzioni per cinese, taiwanese e koreano, che hanno problemi 
simili.
Se non hai a che fare con le lingue orientali o ideografiche, vai di 
collation generica e vedi come reagisce.
Con le entities (Unicode o HTML) avrai sempre un ordine sbagliato, 
perche` 
# e & non sono caratteri alfabetici, quindi vengono sempre prima o dopo 
l'alfabeto standard.
Bye.

 wrote:

Se inserisci un testo come entità html avrà sempre il carattere &
all'inizio della lettera, in MySQL i caratteri così codificati saranno
sempre messi prima della relativa lettera "particolare".
Siccome usi ajax come tecnica per stampare i dati a video, ma usi php
per recuperarli, nello script php che restituisce i risultati potrai
eseguire quella funzione del post precedente. 
Ma io non ho parlato di indicizzare l'array, ho parlato di ordinarlo.


 -- 
hai ragione l'ho detto io
Nella terminologia dbf (database III e IV) indicizzare una tabella o un 
array significa ordinarla per ordine alfabetico e io ho rimasto quel 
linguaggio in testa ma so che con mysql non č la stessa cosa e con gli array 
php e javascript pure.....
?
Comunque tornando a noi se nel php che mi trova i dati cerco di ordinare le 
parole dopo averle trovate e inserite nell'array stesso non le ordina 
comunque bene come ti dicevio prima e se ci sono zeta e esse sottopuntate 
non le considera simili alla esse e zeta normali ovvero non le mette li 
vicino
Oppure la O tagliata (&oslash;) non me la considera una O e me la sbatte 
altriove
La n con la tilde sopra uguale e cosě tante altre
?
Ieri qui nel ng mi hanno consigliato di usare utf unicode in base 64 ma non 
capisco se mi possa servire per superare questi scogli che volevo supoerare 
con minori risorse possibili 


:


 
se metti i dati in base64 nel db ottieni il 30% di schifezza in piu un
macello per cercare qualcosa conversioni ecc...

Ok!
Per adesso vorrei almeno che il campo in italiano fosse a posto e ben 
ordinato.
Quindi siccome nel campo in Italiano le entità sono poche quindi lo posso 
fare a mano.
Se invece lo facessi in automatico per prova per poi farlo eventualmente 
anche negli altri campi che query mi consigli di applicare ?
Così comincio a provare su una copia del db
Grazie 

 anche negli altri campi che query mi consigli di applicare ?
se hai un id univoco fai update su piu campi
select * from tabella
....
...
while {
$sql2 = update tabella set campo=replace_me($row[campo]),
campo1=replace_me($row[campo1])
where ID = $row['ID']
mysql_query($sql2)


Ho provato a mano a cambiare quelle poche voci che avevano delle entità in 
lingua italiana e va tutto bene.
Mi salva e mi mostra perfettamente le vocali accentate con qualsiasi tipo di 
accento.
NON mi accetta le consonanti sotto e/o sopra puntate e le consonati con 
tilde e segni diacritici vari