我正在我的系统中的INI文件中存储翻译,并以这种方式存储:
$ini=parse_ini_file('translations.ini',false,INI_SCANNER_RAW);
这个INI_SCANNER_RAW设置根据文档告诉PHP:
If INI_SCANNER_RAW is supplied,then option values will not be parsed.
在技术上这意味着它不应该使用INI文件中的值进行任何解析,所以我不必在INI文件中引用或转义任何东西.这些都工作:
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ÕÜ`?=)(/&%¤#"!@£$€{[]}\½"
哪些产出可预测:
ˇ1234567890+´õü'äö-.,<>~:_ÖÄ*PÕÜ`?=)(/&%¤#"!@£$€{[]}\½
但这里有一个问题.在我的INI值添加分号(;)的那一刻,即使我试图逃避它,我的解析就会中断.
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 (
(如果我使用单引号而不是双引号也是如此)
我最好的猜测是,这是因为分号被认为是一个评论的字符,所以它被删除,它留下这段文本.起始引号仍然存在,因为结尾引号在分号之后,因此它不被封装.
但是这样做是没有意义的,因为#也被认为是INI文件的注释符号.
但是对于我的系统来说这是一个非常严重的问题,我如何在INI文件中的值字符串中使用分号?这是PHP中的错误还是预期的行为?
谢谢!