Проблема кодирования, покрытия & для & для HTML с использованием PHP - PullRequest
14 голосов
/ 19 августа 2010

У меня есть URL в HTML:

<a href="index.php?q=event&amp;id=56&amp;date=128">

Мне нужно превратить его в строку в точности как:

<a href="index.php?q=event&id=56&date=128">

Я знаю, как это сделать с preg_replace и т. Д., Но есть ли в php функция, которая напрямую связана с кодировкой, которую я могу использовать для других проблем с кодировкой, таких как & nsbp (или что-то еще, и т.д.)? В идеале я отправляю свою строку в функцию, и она выводит '&' вместо & amp. Есть ли универсальная функция для конвертации & TEXT; в реальный характер?

Редактировать: извините, опубликовал это, прежде чем я закончил вводить вопрос. ВОПРОС завершен.

Ответы [ 4 ]

23 голосов
/ 19 августа 2010

использовать html_entity_decode () :

$newUrl = html_entity_decode('<a href="index.php?q=event&amp;id=56&amp;date=128">');
echo $newUrl; // prints <a href="index.php?q=event&id=56&date=128">
5 голосов
/ 19 августа 2010

Использовать htmlspecialchars_decode . Пример прямо со страницы документации PHP:

$str = '<p>this -&gt; &quot;</p>';
echo htmlspecialchars_decode($str); // <p>this -> "</p>
1 голос
/ 19 августа 2010

Не существует встроенной функции PHP, которая будет принимать такой объект, как &amp;, и превращать его в двойную &.На всякий случай путаница, html-сущность для & на самом деле &amp;, а не amp;, поэтому запуск любого встроенного парсера в вашем примере вернет следующее:

<a href="index.php?q=event&id=56&date=128">

, а не

<a href="index.php?q=event&&id=56&&date=128">

Чтобы получить double & version, вам нужно использовать регулярное выражение.

В качестве альтернативы, если вы действительно хотите single & version, у вас есть две возможности.

  1. Если вы просто хотите конвертировать &amp; &quot; &#039; &lt; &gt;, вам следует использовать htmlspecialchars_decode .Этого будет достаточно для приведенного вами примера.
  2. Если вы хотите преобразовать любую строку формата & TEXT;тогда вы должны использовать html-entity-decode .

Я подозреваю, что htmlspecialchars_decode будет быстрее, чем html_entity_decode, поэтому, если он охватывает все сущности, которые вы хотите преобразовать, вы должны использовать это.

0 голосов
/ 21 января 2016

после строки пройти через TinyMCE, только этот код поможет мне

$string = iconv('UTF-8','cp1251',$string);
$string = str_replace(chr(160), chr(32), $string);
$string = iconv('cp1251','UTF-8',$string);
...