Преобразовать в апостроф в PHP - PullRequest
16 голосов
/ 22 июля 2011

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

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

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

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

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

Редактировать:

I 'мы также попробовали html_entity_decode (), но, похоже, он не работает:

echo html_entity_decode('They're here.')

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

Ответы [ 6 ]

31 голосов
/ 22 июля 2011

Поскольку ' не является частью 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.');
4 голосов
/ 06 марта 2014

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

Используйте это так:

html_entity_decode($str,ENT_QUOTES | ENT_HTML5)
4 голосов
/ 22 июля 2011

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

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

2 голосов
/ 07 февраля 2013

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

$value = "They're here.";
html_entity_decode(str_replace("'","'",$value));
1 голос
/ 22 июля 2011

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

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

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

[matt@scharley ~]$ 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

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

0 голосов
/ 22 июля 2011

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

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

...