PHP中如何正确对比包含HTML特殊转义字符的两个数组行值?
PHP数组元素HTML实体对比问题解决方案
问题根因
你遇到的判断失误问题,核心是htmlspecialchars_decode默认配置不会处理单引号的HTML数值实体,你示例中的'就是单引号的实体编码,默认参数下不会被解码为原始撇号,导致对比结果不符合预期。
解决方案
1. 正确解码后再对比
改用覆盖范围更广的html_entity_decode,同时指定处理单引号的参数,再进行对比:
// 统一对两个值做HTML实体解码 $val1 = html_entity_decode($row1[$i], ENT_QUOTES | ENT_HTML5, 'UTF-8'); $val2 = html_entity_decode($row2[$i], ENT_QUOTES | ENT_HTML5, 'UTF-8'); if ($val1 === $val2) { echo 'Rows match'; } else { echo 'Rows do not match'; }
2. 参数说明
ENT_QUOTES:同时解码单引号和双引号对应的HTML实体,解决'类实体无法解码的核心问题ENT_HTML5:按照HTML5规则解析实体,覆盖更多特殊字符的实体类型- 第三个参数显式指定编码为UTF-8,避免不同编码环境下解码出现乱码
- 对比使用
===严格相等判断,避免PHP自动类型转换导致的误判
可选优化
如果两个行值可能存在首尾多余空格、换行符的差异,可在解码后增加trim()处理:
$val1 = trim(html_entity_decode($row1[$i], ENT_QUOTES | ENT_HTML5, 'UTF-8')); $val2 = trim(html_entity_decode($row2[$i], ENT_QUOTES | ENT_HTML5, 'UTF-8'));
内容的提问来源于stack exchange,提问作者user779681
相关产品推荐
相关产品推荐

