Проблема с кодировкой, обложка и & to html с использованием php

У меня есть 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; в фактический символ?

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

Ответ 1

используйте 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">

Ответ 2

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

$str = '<p>this -&gt; &quot;</p>';
echo htmlspecialchars_decode($str); // <p>this -> "</p>

Ответ 3

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

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

а не

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

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

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

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

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

Ответ 4

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

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