PHP: file () каждому символу предшествует "\ 0" - PullRequest
1 голос
/ 11 июля 2011

У меня есть INI-файл, созданный программой AutoHotKey, написанной другим членом команды, над которой я работаю.Я пытаюсь прочитать файл в PHP как массив.Я использую встроенную функцию file().Когда я читаю файл и затем отображаю его, используя var_dump($file) ($file - это имя массива, в который читается файл), каждому символу предшествует "\ 0" (который является нулевым символом).Каждый Кто-нибудь видел это раньше?Я мог бы просто удалить все нулевые символы после прочтения в файле, но я бы предпочел найти решение.

Когда я открываю INI-файл в текстовых редакторах, он открывается очень хорошо.Я также прочитал с помощью функции file() файл desktop.ini, созданный Windows, и он прочитал, как и ожидалось, символам не предшествовал "\ 0"

Ответы [ 2 ]

3 голосов
/ 11 июля 2011

Это связано с кодировкой файла. Некоторые (большинство) кодировки Unicode требуют 2 байта на символ. Это означает, что каждому байтовому символу предшествует \ 0. Файл по-прежнему совершенно корректен, но если вы попытаетесь прочитать его с однобайтовой кодировкой типа windows-1252, он будет выглядеть странно. Вы можете попробовать передать его через utf8_decode и посмотреть, очистит ли это. UTF 8 - это потенциальное многобайтовое кодирование от 1 до 4 байтов (с минимумом 1). Ваш текстовый редактор автоматически выяснит это и откроет его как Unicode, поэтому он выглядит там хорошо.

Примечание: поскольку он использует 2-байтовую кодировку, это определенно не utf-8, это может быть utf-16, но функции UTF-8 могут его анализировать.

0 голосов
/ 11 июля 2011

вы открыли файл в редакторе HEX?Возможно, в вашем файле есть скрытые символы ...

...