2012-10-25 25 views
9

मैं अपने सिस्टम में मेरी INI फ़ाइल में अनुवाद भंडारण कर रहा हूँ और वे इस तरह से जमा हो जाती है:पीएचपी साथ पार्सिंग INI फ़ाइल जब सेमी-कोलन (;) मूल्य में शामिल है

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

यह INI_SCANNER_RAW सेटिंग बताता है दस्तावेज के अनुसार PHP, कि:

यदि INI_SCANNER_RAW की आपूर्ति की जाती है, तो विकल्प मानों को पार्स नहीं किया जाएगा।

तकनीकी रूप से इसका मतलब है कि इसे आईएनआई फ़ाइल में मूल्यों के साथ कोई पार्सिंग नहीं करना चाहिए, इसलिए मुझे आईएनआई फ़ाइल में कुछ भी उद्धरण या बचाना नहीं है। ये सब काम:

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

वे होगा आउटपुट के रूप में:

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

यहां तक ​​कि इस काम करता है:

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

कौन सा जाहिर आउटपुट:

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

लेकिन यहाँ एक समस्या है। जिस क्षण मैं अपने आईएनआई मूल्य में सेमी-कोलन (;) जोड़ता हूं, मेरे पार्सिंग ब्रेक, भले ही मैं इसे से बचने की कोशिश करता हूं।

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

उत्पादन के सभी प्रकार है:

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

(और ऐसा ही होता है अगर मैं डबल उद्धरण के बजाय एकल उद्धरण का उपयोग करें)

मेरे सबसे अच्छा अनुमान है कि इस वजह से अर्ध है -कोलन को एक टिप्पणी के लिए एक चरित्र माना जाता है, इसलिए इसे हटा दिया जाता है और यह पाठ के इस स्निपेट को छोड़ देता है। शुरुआती उद्धरण वहां रहते हैं क्योंकि अंतिम उद्धरण सेमी-कोलन के बाद होते हैं, इस प्रकार यह encapsulating नहीं है।

लेकिन यह थोड़ा समझ में आता है क्योंकि # को आईएनआई फाइलों के लिए एक टिप्पणी प्रतीक भी माना जाता है।

लेकिन यह मेरे सिस्टम के लिए एक बहुत ही गंभीर समस्या है, मैं एक आईएनआई फ़ाइल में एक मूल्य स्ट्रिंग में सेमी-कोलन का उपयोग कैसे कर सकता हूं? क्या यह PHP या अपेक्षित व्यवहार में एक बग है?

यह किसी अपवाद या नोटिस या त्रुटि को फेंक नहीं देता है।

धन्यवाद!

उत्तर

12

यह एक ज्ञात बग है:

यह fixed in PHP 5.4.5

इसके अलावा fixed in PHP 5.3.15

+0

चियर्स था, जाहिरा तौर पर यह (नए पीएचपी संस्करणों में भी निश्चित होती है जून/जुलाई 2012 के बाद से), लेकिन वहां के सभी पुराने संस्करणों के लिए कठिन भाग्य। मुझे अब भी लिंक मिल गया है, लेकिन धन्यवाद, यह सही जवाब है। (एक बार यह मुझे एक बार सही के रूप में चिह्नित करेगा)। – kingmaple

+3

एफवाईआई: यह php5 में तय किए गए चेंजलॉग में है।4.5 http://php.net/ChangeLog-5.php –

+0

धन्यवाद माइक बी – kingmaple