|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 326
|
[PHP e SAX] Problema parsing
Sto sviluppando un guestbook in php che utilizza sax per parsare i dati memorizzati.
Ho notato che se all'interno dei file xml utilizzo caratteri accentati come à è ì ò ù, oppure £ e alcuni altri, mi restituisce "XML ERROR: Invalid character at line ..." Come mai? come faccio a utilizzare questo tipo di caratteri? Inoltre quando apro uno di questi file XML, se faccio una fread(), questa si blocca appena incontra un carattere "<". E' un po' limitativo visto che devo leggere un file XML, che è pieno di questi caratteri.. C'è una soluzione? Grazie |
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
<?xml version="1.0" encoding="ISO-8859-1"?> Quote:
Codice:
$xml_parser = xml_parser_create (); ...imposta altre opzioni del parser... $handle = @fopen ("nome_file.xml", "r"); if ($handle !== FALSE) { while ($data = fread ($handle, 4096)) if (!xml_parse ($xml_parser, $data, feof ($handle))) die ("XML error"); fclose ($handle); } xml_parser_free ($xml_parser);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 326
|
L'errore era causato dal fatto che avevo tralasciato questa parte di dichiarazione: encoding="ISO-8859-1"
Però ora al posto dell'errore mi visualizza i caratteri sbagliati: per esempio se sul file scrivo: à è ì ò ù £ % il parser mi legge: à è ì ò ù £ % Forse c'è un altro tipo di encoding... Passando all'altro argomento, il problema è qui: $data = fread ($handle, 4096)) La fread() e anche la fgets(), se nel file è presente il carattere < , dentro $data inseriscono il contenuto del file fino alla prima occorrenza di < , dopodichè termina come se quel carattere lo riconoscesse come end of file. Se per esempio nel file ho scritto: "ciao com<e stai" dentro $data mi ritroverò questo "ciao com" La cosa strana è che se uso file_get_contents() questo non succede... Il fatto è che non volevo leggere sempre tutto il file, perchè col passare del tempo i messaggi diventano diverse migliaia, e parsare un file enorme ogni volta che si chiama una pagina diventa costoso, soprattutto in termini di tempo penso.. Ultima modifica di DoubleAJ : 07-02-2006 alle 13:32. |
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ma, tanto per sapere, la pagina HTML che crei quale charset ha?? Quote:
Come fai a dire che in $data ti ritrovi solo "ciao com"??? Hai fatto un echo $data; sulla pagina HTML??? Se così, certo che non ti trovi i <. Perché vengono visti come dei tag. Comunque a te non dovrebbe interessare il blocco in $data. È la funzione xml_parse che si occupa di analizzare i dati e chiamare man mano le funzioni di callback definite!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 326
|
Perfetto! Bisognava cambiare il charset della pagina html da iso-8859-1 a UTF-8...
Ora tenendo il file xml in ISO-8859-1 e la pagina html a UTF-8 mi visualizza bene.. Grazie! Ora guardo bene anche per il problema della fread()... |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 326
|
Quando vedevo male i caratteri avevo sia la pagina html che il file xml in iso-8859-1.
Ora, cambiando solo la pagina html in UTF-8 vedo tutto bene... Non chiedermi perchè, in effetti non ha molto senso... |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Vuol dire, molto probabilmente, che nonostante tu abbia specificato il charset iso-8859-1 nel file xml (nella prima riga), hai dentro il file dei caratteri codificati come UTF-8. Non so come hai fatto il file xml, cioè con quale tool o editor.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 326
|
...wordpad...
![]() Però nel salvataggio ho lasciato la codifica ansi. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:18.