2012-10-25 2 views
9

sto memorizzazione di traduzioni in mio file INI nel mio sistema e sono memorizzati in questo modo:analisi del file INI con PHP quando e virgola (;) è incluso nel valore

$ini=parse_ini_file('translations.ini',false,INI_SCANNER_RAW); 

Questa impostazione INI_SCANNER_RAW dice PHP, secondo la documentazione, che:

Se INI_SCANNER_RAW viene indicato, i valori delle opzioni non sarà analizzato.

Tecnicamente questo significa che non dovrebbe fare alcuna analisi con i valori nel file INI, quindi non devo citare o sfuggire nulla nel file INI. Questi tutti i lavori:

example1="one" 
example2=one 
example1='one' 
example3="double quotes ("value")" 
example4=double quotes ("value") 
example3='double quotes ("value")' 

Avrebbero uscita come:

one 
one 
one 
double quotes ("value") 
double quotes ("value") 
double quotes ("value") 

Anche questo funziona:

semi-colon1="ˇ1234567890+´õü'äö-.,<>~:_ÖÄ*PÕÜ`?=)(/&%¤#"[email protected]£$€{[]}\½" 

quali uscite prevedibile:

ˇ1234567890+´õü'äö-.,<>~:_ÖÄ*PÕÜ`?=)(/&%¤#"[email protected]£$€{[]}\½ 

Ma qui è un problema. Nel momento in cui molto ho aggiungere un punto e virgola (;) per il mio valore INI, le mie pause di analisi, anche se cerco di sfuggire.

example1="semi-colon looks like (;) character" 
example1="semi-colon looks like (\;) character" 
example1="semi-colon looks like (\\;) character" 
example1="semi-colon looks like (\\\;) character" 

Tutto l'output è:

"semi-colon looks like (
"semi-colon looks like (
"semi-colon looks like (
"semi-colon looks like (

(E lo stesso vale se uso le virgolette singole al posto delle virgolette)

La mia ipotesi migliore è che questo è dovuto al fatto semi -colon è considerato un personaggio per un commento, quindi viene rimosso e lascia questo snippet di testo. Le citazioni di partenza rimangono lì perché le virgolette che terminano sono dopo il punto e virgola, quindi non è incapsulando.

Ma questo ha poco senso in quanto # è anche considerato un simbolo di commento per i file INI.

Ma questo è un problema piuttosto grave per il mio sistema, come posso utilizzare un punto e virgola in una stringa del valore in un file INI? Si tratta di un bug in PHP o comportamento previsto?

Ciò non un'eccezione o una comunicazione o un errore neanche.

Grazie!

risposta

12
+0

Cheers, a quanto pare è risolto nelle versioni di PHP più recenti (dal giugno/luglio 2012), ma sfortuna per tutte le vecchie versioni là fuori. Ho trovato il collegamento anche io ora, ma grazie, questa è la risposta corretta. (segnerà come corretto una volta che me lo consente). – kingmaple

+3

FYI: E 'nel changelog, come fissato in PHP5.4.5 http://php.net/ChangeLog-5.php –

+0

Grazie Mike B – kingmaple