Я анализирую 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);
и он дает тот же результат.
Я попытался воспроизвести вашу проблему с помощью этого простого фрагмента 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 "test".";
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 "test".
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 "test".
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 для их отображения.
header('Content-Type: text/html; charset=utf-8');
в начале кода, так что это приведет к UTF-8 на выходе. Спасибо!
$string
? 3. Это похоже на проблему с кодом символа для меня.