Newsgroup: it.comp.www.php
Titolo: PHP 4 e 5, XML e Unicode

Salve a tutti.
Personalmente non sono un programmatore PHP (lo conosco appena), ma un 
sistemista; però mi trovo a dover gestire lo spostamento di un sito da un 
server ad un altro, e sto avendo un po' di problemi che presumo siano dovuti 
ad un utilizzo piuttosto "amatoriale" del PHP da parte di chi ha realizzato 
il sito stesso; per questo ho pensato di chiedere aiuto.
Dunque: il sito, che gestisce un'applicazione di rassegna stampa per una 
intranet aziendale, viene spostato da Apache su Linux a IIS su Windows 2003; 
ma non è questo il problema: PHP l'ho installato e funziona perfettamente.
Il problema è nel cambio di versione: il sito è stato sviluppato usando PHP 
4, mentre sul nuovo server c'è PHP 5 (e deve rimanerci, serve per altre 
ragioni).
Il sito non ha particolari problemi a funzionare, salvo in un dettaglio: 
quando carica del testo da dei file XML (l'applicazione funziona così), 
tutti i caratteri accentati escono fuori corrotti e sostituiti da testo 
incomprensibile, cosa che usando PHP 4 non avviene.
In particolare, installando PHP 4 sulla stessa macchina al posto di PHP 5, 
tutto funziona alla perfezione, con gli stessi script e gli stessi file XML, 
il che sembrerebbe escludere il sistema operativo e il web server come causa 
del problema.
Ora, non essendo io un programmatore PHP, non so cosa sia cambiato dalla 
versione 4 alla versione 5 nella gestione dei caratteri Unicode. So che il 
problema si presenta solo in presenza di file XML: usando uno script del 
tipo
<?php echo "Questa è una prova!";?>
il carattere "è" viene visualizzato alla perfezione sul browser.
Aprendo i file XML con un editor di testo, i caratteri accentati appaiono 
scritti così come sono, senza codici strani (tipo "&egrave;" per l'HTML, per 
intenderci).
Qualcuno sa indirizzarmi sulla strada giusta?
Grazie
Massimo

 tipo
che io sappia da php4 a php5 non cambia niente per la gestione
dell'unicode (pero' sinceramente non me ne sono mai occupato, ma
guardando sul changelog e sul manuale non ho trovato niente). c'e' da
dire che il problema potrebbe essere nel parsing dell'xml. php4 usava
delle funzioni abbastanza scomode e forse anche un po' farraginose, di
contro php5 ha introdotto simpleXML
(
http://it.php.net/manual/it/ref.simplexml.php
) che e' una vera manna.
puoi importare un xml e accedervi come se fosse un oggetto. per quanto
riguarda l'uso della api dom xml in php5 l'estensione dom xml
(
http://it.php.net/manual/it/ref.domxml.php
) di php4 e' stata
sostitutita da un'altra (che si chiama semplicemente dom:
http://it.php.net/manual/it/ref.dom.php
).
quanto alla compatibilita': "Nota:  Questo modulo non è più
considerato sperimentale. Tuttavia non sarà rilasciato con PHP 5, e
sarà solo distribuito con PHP 4. Se si ha bisogno del supporto DOM XML
in PHP 5, si può utilizzare il modulo DOM. Questa estensione domxml
non è compatibile con DOM."
senza sapere niente dell'applicazione il problema potrebbe essere
questo. se effettivamente lo fosse sarebbe necessario correggere parte
del codice dell'applicazione per farla girare con php5

del codice dell'applicazione per farla girare con php5
Non ho il codice sottomano, se domani ci riesco posterò parte di quello che 
legge i file XML.
Anche se temo che dovrò installare PHP 4... il 5 sta dando un sacco di 
casini anche con un portale basato su Mambo che deve girare sulla stessa 
macchina :-(
La compatibilità tra versioni, questa sconosciuta...
Massimo



C'è un limite alla compatibilità, è bella, è comoda, ma a volte bisogna  
avere il coraggio di fare un passo avanti, altrimenti il linguaggio non si  
evolve.
Tra parentesi php5 compatibile quasi del tutto con php4, hanno fatto un  
grande sforzo in questo senso (personalmente avrei preferito meno  
compatibilità e l'introduzione di altre features, come ad esempio una  
maggiore tipizzazione).
Detto questo se cerchi sul manuale php, nelle faq e nei messaggi vecchi  
dei newsgroup, trovi sicuramente il modo di installare php4 e 5 sulla  
stessa macchina windows, uno come modulo di apache e l'altro come cgi.
Tu usi iis, ma non è detto che una maniera non esista anche lì.
A parte questa soluzione, magari prova a dare un'occhiata ai php.ini delle  
due installazioni (php4 e php5) non è detto che non sia semplicemente un  
cambiamento dei default di configurazione quello che ti dà problemi.
Tac
-- 
La netiquette prevede sign di al massimo quattro righe.
Purtroppo la mia sign in quattro righe non ci stà.

 cambiamento dei default di configurazione quello che ti dà problemi.
Provato anche questo, non sembra essere un problema di php.ini, non c'è 
niente lì dentro relativo all'unicode (o se c'è non l'ho visto).
Quello che non capisco è perché lo stesso codice, caricando gli stessi file 
XML, con PHP 4 visualizza le accentate senza nessun problema mentre con PHP 
5 incasina tutto. Se anche hanno aggiunto delle nuove librerie per il 
parsing dell'XML, o qualche modo diverso di gestire l'unicode, mi sembra 
strano che lo *stesso* codice, da una versione all'altra, perda la capacità 
di gestire a dovere alcuni caratteri.
Massimo