Preg_replace Символ Юникода спецификации UTF-8

Я столкнулся с символом Unicode спецификации при разборе файла CSV и нашел это изящное решение, которое решило проблему.

//Remove UTF8 Bom
function remove_utf8_bom($text) {
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}

Ссылка: Как удалить несколько последовательностей спецификации UTF-8 перед "<! DOCTYPE>"?

Однако я не совсем понимаю, как это работает, и мне было интересно, может ли кто-нибудь объяснить, что здесь происходит.

Некоторые вопросы, которые у меня есть:

  1. Является ли 'EFBBBF' шестнадцатеричным представлением символа Unicode спецификации?
  2. Что такое H *? (Я предполагаю, что именно так мы указываем формат строки EFBBBF)
  3. Нужно ли преобразовывать EFBBBF в двоичное представление?
  4. Когда я пытаюсь распечатать переменную $ bom, это просто пустая строка. Почему спецификация невидима?
  5. Как preg_replace работает с двоичными символами?
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
515
1

Ответы 1

BOM - это символ Unicode U+FEFF.

EFBBBF - это шестнадцатеричное представление кодировки UTF-8 этого символа. pack('H*', ...) принимает строку и преобразует ее в байты, предполагая, что каждая пара символов в строке представляет значение байта в шестнадцатеричном формате.

Запись BOM в виде строки EFBBBF упрощает ввод, но означает, что вам нужно преобразовать ее в байты, используя pack, чтобы сравнить ее с BOM в начале ваших данных.

BOM невидим, когда вы его распечатываете, потому что U+FEFF - это символ Unicode. ZERO WIDTH NO-BREAK SPACE, он используется как BOM только в том случае, если это первый символ в файле.

Для правильной работы $text должен быть необработанным потоком данных UTF-8. Если он был декодирован из UTF-8 в символы, вы можете пропустить большую часть этого и просто написать

$text = preg_replace("/^\uFEFF/", '', $text); 

Спасибо за ответ. Как определить, является ли что-то необработанным потоком данных UTF-8?

fsociety 03.10.2018 11:09

Вышеупомянутое не работает без функции pack ().

fsociety 03.10.2018 11:30

@fsociety Вам нужно знать. см. вопрос это

JGNI 03.10.2018 13:47

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