html_entity_decode无效,如何将'转换为单引号?
问题分析与解决方案
1. 未指定正确的解码标志
html_entity_decode的默认(或你使用的ENT_COMPAT)标志仅解码双引号对应的HTML实体("),不会处理单引号的实体'。要解码单引号实体,必须指定ENT_QUOTES标志:
// 同时解码单引号、双引号对应的HTML实体 $var = html_entity_decode($var, ENT_QUOTES, 'UTF-8');
如果你的PHP版本≥5.4,可额外添加ENT_SUBSTITUTE标志,避免无效字符导致解码失败:
$var = html_entity_decode($var, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
2. 内容被双重HTML编码
若上述方法仍无效,大概率是字符串被双重编码:原本的单引号先被转成',之后这个实体又被编码一次,变成'(这才是数据库中存储的实际值)。此时单次解码只能把&转成&,得到',需要连续解码两次:
// 处理二次编码的内容 $var = html_entity_decode(html_entity_decode($var, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
快速验证方法
先输出原始字符串的HTML源码,确认实际存储内容:
echo htmlspecialchars($var);
如果输出是',说明是双重编码问题;如果是',则是解码标志未设置正确。
内容的提问来源于stack exchange,提问作者headache
相关产品推荐
相关产品推荐

