html_entity_decode失效?PHP转义内容无法转为HTML的解决方法
解决PHP双重HTML编码字符串的解码问题
嘿,这个问题很典型——你的字符串被双重编码了,只解码一次当然出不来真实的HTML标签啦!
问题原因拆解
你给出的原始字符串是:
<p style="font-size:18px;color:#ff0000">Cancelled</p>
它的编码过程其实是两步:
- 先把真实HTML标签里的特殊字符转成实体,比如
<→<,"→" - 接着又把这些实体里的
&再次转成&,所以最终变成了&#x3C;这种双重转义的形式
你之前用单次html_entity_decode或htmlspecialchars_decode,只能把&转回&,得到的还是<p...这种实体字符串,自然不会被解析成HTML。
解决方案:解码两次
只需要对字符串做两次解码操作,就能还原出真实的HTML:
$encodedString = '&#x3C;p style=&#x22;font-size:18px;color:#ff0000&#x22;&#x3E;Cancelled&#x3C;/p&#x3E;'; // 第一步:把&转成&,得到未被二次转义的实体字符串 $firstDecode = htmlspecialchars_decode($encodedString); // 第二步:把HTML实体转成真实的标签 $finalHtml = html_entity_decode($firstDecode); // 输出结果:<p style="font-size:18px;color:#ff0000">Cancelled</p> echo $finalHtml;
或者更简洁的写法,直接嵌套调用两次解码函数:
$finalHtml = html_entity_decode(htmlspecialchars_decode($encodedString)); echo $finalHtml;
如果你的字符串包含单引号这类特殊字符,可以加上参数确保解码彻底:
$finalHtml = html_entity_decode( htmlspecialchars_decode($encodedString, ENT_QUOTES), ENT_QUOTES, 'UTF-8' );
这样输出的内容就是可以被浏览器解析的真实HTML标签啦!
内容的提问来源于stack exchange,提问作者Rushabh Shah
相关产品推荐
相关产品推荐

