PHP - html_entity_decode не все декодирует

0

Я анализирую HTML-страницу. В какой-то момент я получаю текст между div и используя html_entity_decode для печати этого текста.

Проблема в том, что на странице есть символы, подобные этой звезде или другим, например, такие как ︎, ◄, ◉ и т.д. Я проверил, и эти символы не закодированы на исходной странице, они похожи на то, что вы их видите нормально.

На странице используется charset = "UTF-8"

Поэтому, когда я использую

html_entity_decode($string, ENT_QUOTES, 'UTF-8');

Например, звезда "декодируется" до â˜

$ string получается с помощью

document.getElementById("id-of-div").innerText

Я хотел бы их правильно декодировать. Как это сделать в PHP?

ПРИМЕЧАНИЕ. Я пробовал htmlspecialchars_decode($string, ENT_QUOTES); и он дает тот же результат.

  • 0
    1. Есть ли у звезды эквивалентная HTML-сущность? 2. Итак, что содержит $string ? 3. Это похоже на проблему с кодом символа для меня.
  • 0
    1. Понятия не имею 2. в теории все строки, содержащиеся в конкретном div. 3. Я не уверен.
Показать ещё 7 комментариев
Теги:
dom
parsing

1 ответ

5
Лучший ответ

Я попытался воспроизвести вашу проблему с помощью этого простого фрагмента PHP:

<?php
  // Make sure our client knows we're sending UTF-8
  header('Content-Type: text/plain; charset=utf-8');
  $string = "The page contains characters like this star ★ or others like shapes like ︎, ◄, ◉, etc. Here are some entities: This is a &quot;test&quot;.";
  echo 'String: ' . $string . "\n";
  echo 'Decoded: ' . html_entity_decode($string, ENT_QUOTES, 'UTF-8');

Как и ожидалось, выход:

String: The page contains characters like this star ★ or others like shapes like ︎, ◄, ◉, etc. Here are some entities: This is a &quot;test&quot;.
Decoded: The page contains characters like this star ★ or others like shapes like ︎, ◄, ◉, etc. Here are some entities: This is a "test".

Если я изменю charset в заголовке iso-8859-1, я вижу следующее:

String: The page contains characters like this star ★ or others like shapes like ⬛︎, ◄, ◉, etc. Here are some entities: <span>This is a &quot;test&quot;.
Decoded: The page contains characters like this star ★ or others like shapes like ⬛︎, ◄, ◉, etc. Here are some entities: <span>This is a "test".

Итак, я бы сказал, что ваша проблема - проблема с отображением. "Интересные" символы остаются полностью нетронутыми html_entity_decode, как и следовало ожидать. Это просто, что любой код, который у вас есть, или что вы используете для просмотра вашего вывода, использует неправильное использование iso-8859-1 для их отображения.

  • 1
    Ты прав! СПАСИБО! Я забыл добавить header('Content-Type: text/html; charset=utf-8'); в начале кода, так что это приведет к UTF-8 на выходе. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню