Php строка невидимый символ после get_file_contents ()

У меня есть файл .txt, созданный из оболочки управления сервера обмена.

Я использую php и хочу использовать get_file_contents () для получения содержимого файла, а затем preg_match () с «DisplayName». Эта проблема относится ко всему файлу.

$file = file_get_contents("file.txt");

//Does not work
preg_match("/DisplayName/", $file, $matches);

//Does work
preg_match("/D.i.s.p.l.a.y.N.a.m.e/", $file, $matches);

//Returns 1
preg_match("/D(.)i/", $file, $matches);
echo strlen($matches[1][0]);

Как удалить эти невидимые символы или что это может быть? Есть ли в php функция, чтобы узнать, что это за персонаж?

https://www.soscisurvey.de/tools/view-chars.php говорит, что скрытых символов нет.

Пример:

DisplayName: Имя

ServerName: Сервер

PrimarySmtpAddress: электронная почта

Адреса электронной почты: {список рассылки}

Я надеюсь, что вы, ребята, сможете мне помочь.

Скопируйте / вставьте текст, который у вас есть, в вопрос. Не сомневайтесь, если вы не видите символы.

Wiktor Stribiżew 31.10.2018 14:04

hexdump -C тоже должен помочь при отладке.

madflow 31.10.2018 14:12

Ваш DisplayName в примере не имеет специальных символов.

Wiktor Stribiżew 31.10.2018 14:13

hexdump -C вернул точки (.) между символами ... Что это? При открытии они не видны.

RABIGA7OR 31.10.2018 14:18

каково шестнадцатеричное значение точек? Они 0x00 нули?

Matt_S 31.10.2018 14:24

hexdump -C отображает их как 00

RABIGA7OR 31.10.2018 14:26
0
6
203
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, что файл закодирован как Unicode, хотя вы ожидаете, что это будет простой ASCII.

Попробуй это:

$file = file_get_contents("file.txt", FILE_TEXT);

или пользовательская функция:

function file_get_contents_utf8($fn) {
     $content = file_get_contents($fn);
      return mb_convert_encoding($content, 'UTF-8',
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

$file = file_get_contents_utf8("file.txt");
Ответ принят как подходящий

Спасибо за вашу помощь, мне удалось это исправить вот так:

$file = file_get_contents("file.txt");
$file = str_replace(chr(0), "", $file);

Я бы действительно посоветовал не делать этого. На данный момент это может сработать для примера текстового файла, но у вас возникнут проблемы, если файл должен содержать символы Unicode. Просто сравните Таблица ASCII с Таблица Unicode, и вы поймете, что я имею в виду.

Theo 02.11.2018 10:53

Другие вопросы по теме