php ini 分号,当分号(;)被包含在值中时,用PHP解析INI文件

我正在我的系统中的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中的错误还是预期的行为?

这也不会引起异常或通知或错误.

谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值