php - 当值中包含分号 (;) 时使用 PHP 解析 INI 文件

标签 php debugging parsing 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 中的错误还是预期的行为?

这也不会引发异常、通知或错误。

谢谢!

最佳答案

关于php - 当值中包含分号 (;) 时使用 PHP 解析 INI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13069401/

相关文章:

javascript - 在 ajax 调用 (PHP) 中设置 cookie,然后在 ajax 回调内重定向 (JavaScript)

php - 在特定时间更改数据库字段

javascript - 尝试调试 TestCafe 测试时 VS 代码出错

c - 从使用调试选项编译的 C 代码获取源代码

parsing - 构建一个具有大量标记的词法分析器

javax.swing.text.html.HTML 文档按名称获取元素

php - Drupal 8,文件/图像字段目录标记

php - laravel redirect()->route() 和 to_route() 有什么不同

windows - 在 Windows 中捕获崩溃

parsing - 如何使用 nltk 或 spacy 从带括号的解析字符串中获取解析 NLP 树对象?