Как преобразовать объекты HTML как - к их эквивалентам символов?

Я создаю файл, который должен быть сохранен на локальном компьютере пользователя (не отображается в веб-браузере).

В настоящее время я использую html_entity_decode, но это не преобразование символов типа – (это n-тире), и мне было интересно, какую еще функцию я должен использовать.

Например, когда файл импортируется в программное обеспечение, вместо ndash или просто a - он отображается как –. Я знаю, что могу использовать str_replace, но если это происходит с этим символом, это может произойти со многими другими, поскольку данные являются динамическими.

Ответы

Ответ 1

Вам нужно определить целевой набор символов. – не является допустимым символом в наборе символов ISO-8859-1 по умолчанию, поэтому он не декодируется. Определите UTF-8 как выходную кодировку и она будет декодироваться:

echo html_entity_decode('–', ENT_NOQUOTES, 'UTF-8');

Если это вообще возможно, сначала следует избегать объектов HTML. Я не знаю, откуда взялись эти закодированные данные, но если вы храните их так же, как в базе данных или в другом месте, вы делаете это неправильно. Всегда сохраняйте данные в кодировке UTF-8 и конвертируйте их только в объекты HTML или иным способом выходите для вывода при необходимости.

Ответ 2

Попробуйте mb_convert_encoding():

$string = "n–dash";
$output = mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
echo $output;

Ответ 3

UPDATE

function decode_characters($data)
{
    $text = $data;
    $enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1");
    $resutl_characters = iconv($enc, "UTF-8", $text);
    return $resutl_characters;
}

Ответ 4

Кодировать файл как UTF-8 с помощью utf8_encode(). Тогда вам не нужно ничего заменять/удалять.

Ответ 5

Вы пытаетесь превратить символы в HTML-объекты для хранения и последующего извлечения?

htmlentities('–', ENT_COMPAT, 'UTF-8');
// Returns "–"

Если я неправильно прочитал ваш вопрос, пожалуйста, дайте мне знать.

Ответ 6

У меня была аналогичная проблема. Я извлекал HTML-абзацы и сохранял в базе данных, но текст сохранялся бы со всеми символами HTML. Использование mb_convert_encoding() не помогло. Однако html_entity_decode($str); работает!