Конвертировать ' к апострофе в PHP

Мои данные содержат в нем много HTML-объектов (•... и т.д.), включая '. Я просто хочу преобразовать его в эквивалент символа.

Я предположил, что htmlspecialchars_decode() будет работать, но - не повезло. Мысли?

Я пробовал это:

echo htmlspecialchars_decode('They're here.');

Но он возвращает: They're here.

Edit:

Я также пробовал html_entity_decode(), но он не работает:

echo html_entity_decode('They're here.')

также возвращает: They're here.

Ответы

Ответ 1

Так как ' не является частью HTML 4.01, он по умолчанию не преобразовывается в '.

В PHP 5.4.0 были добавлены дополнительные флаги для обработки разных языков, каждый из которых включает ' в качестве объекта.

Это означает, что вы можете сделать что-то вроде этого:

echo html_entity_decode('They're here.', ENT_QUOTES | ENT_HTML5);

Вам понадобится ENT_QUOTES (конвертировать одиночные и двойные кавычки) и ENT_HTML5 (или любой флаг языка, отличный от ENT_HTML401, поэтому выберите наиболее подходящую для вашей ситуации).

До PHP 5.4.0 вам нужно будет использовать str_replace:

echo str_replace(''', "'", 'They're here.');

Ответ 2

Объект ' и многие другие не относятся к таблице перевода PHP, используемой функциями html_entity_decode и htmlspecialchars_decode, к сожалению.

Отметьте этот комментарий из руководства PHP: http://php.net/manual/en/function.get-html-translation-table.php#73410

Ответ 3

Существует "правильный" способ, без использования str_replace, @cbuckley был прав, потому что по умолчанию для html_entity_decode является HTML 4.01, но вы можете установить параметр HTML 5, который будет декодировать его.

Используйте его следующим образом:

html_entity_decode($str,ENT_QUOTES | ENT_HTML5)

Ответ 4

Это должно работать:

$value = "They're here.";
html_entity_decode(str_replace("'","'",$value));

Ответ 5

То, что вы на самом деле ищете, html_entity_decode().

html_entity_decode() переводит все сущности в символы, а htmlspecialchars_decode() только отменяет кодировку htmlspecialchars().

РЕДАКТИРОВАТЬ: Глядя на примеры на странице, с которой я связан, я провел немного больше исследований и, похоже, не работает:

[[email protected] ~]$ php
<?php
$tmp = array_flip(get_html_translation_table(HTML_ENTITIES));
var_dump($tmp['&apos;']);
PHP Notice:  Undefined index: &apos; in - on line 3
NULL

Вот почему он не работает. Почему это не в справочной таблице, это еще один вопрос, к чему я не могу ответить.

Ответ 6

Пробовали ли вы использовать echo htmlspecialchars('They&apos;re here.')?

Я думаю, это то, что вы ищете.