Я храню переводы в своем INI-файле в своей системе, и они хранятся следующим образом:
$ini=parse_ini_file('translations.ini',false,INI_SCANNER_RAW);
Этот параметр INI_SCANNER_RAW сообщает PHP, согласно документации, что:
Если указан INI_SCANNER_RAW, то значения параметров не будут анализироваться.
Технически это означает, что он не должен анализировать значения в файле 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 или ожидаемое поведение?
Это также не вызывает исключения, уведомления или ошибки.
Благодарю вас!