PHP中如何将编码字符还原为原始字符串?
解决方法
你的字符串经历了两次HTML实体转义,需要执行两次解码操作才能恢复原始文本:
- 第一次解码:将转义后的
&还原为&,得到包含'和"的中间字符串 - 第二次解码:将中间字符串中的
'(单引号的十进制实体)和"(双引号的命名实体)还原为原始符号
以PHP为例,代码实现如下:
// 提交后得到的字符串 $encoded_str = 'ab'wefdty?"aaavvv'; // 第一次解码:处理&的转义 $first_decode = html_entity_decode($encoded_str, ENT_QUOTES); // 第二次解码:处理单引号和双引号的实体 $original_str = html_entity_decode($first_decode, ENT_QUOTES); // 输出原始文本:ab"wefdty?'aaavvv echo $original_str;
也可以合并为一行代码:
$original_str = html_entity_decode(html_entity_decode($encoded_str, ENT_QUOTES), ENT_QUOTES);
如果使用htmlspecialchars_decode,效果一致:
$original_str = htmlspecialchars_decode(htmlspecialchars_decode($encoded_str, ENT_QUOTES), ENT_QUOTES);
核心原因是:你的原始文本先被转义为包含'和"的字符串,之后字符串中的&又被再次转义为&,所以必须两次解码才能完全还原。
内容的提问来源于stack exchange,提问作者user18435906
相关产品推荐
相关产品推荐

