编码问题,转换&到&用于使用PHP的HTML

时间:2010-08-18 21:40:30

标签: php character-encoding html-entities

我在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中是否有一个函数直接处理我可以用于其他编码问题的编码,例如&amp; nsbp(或者它是什么等等)?理想情况下,我会将我的字符串发送到函数中,它会输出'&amp;'而不是&amp; amp。是否有转换&TEXT的通用功能;成为一个真正的角色?

编辑:对不起,在我输入完问题之前发布了这个。问题现已完成。

4 个答案:

答案 0 :(得分:23)

使用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">

答案 1 :(得分:4)

使用htmlspecialchars_decode。直接来自PHP文档页面的示例:

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

答案 2 :(得分:1)

没有内置的PHP函数可以使用诸如&amp;之类的实体并将其转换为double&amp ;.为了防止混淆,html实体为&amp;实际上是&amp;,而不是amp;,因此在您的示例上运行任何内置解析器都将返回以下内容:

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

而不是

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

为了获得双倍和版本,您需要使用正则表达式。

或者,如果你实际上想要单身&amp;版本,你有两种可能性。

  1. 如果您只想转换&amp; &quot; &#039; &lt; &gt;,则应使用htmlspecialchars_decode。这对于您提供的示例就足够了。
  2. 如果您希望转换格式&amp; TEXT的任何字符串;然后你应该使用html-entity-decode
  3. 我怀疑htmlspecialchars_decode会比html_entity_decode更快,所以如果它涵盖了你想转换的所有实体,你应该使用它。

答案 3 :(得分:0)

字符串经过TinyMCE后,只有这段代码可以帮助我

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