PHP如何过滤字符串数组中的\u00a0字符 相等判断匹配不生效问题
问题核心原因
UTF-8编码下不间断空格(对应HTML的 ,Unicode码位U+00A0)的存储格式为双字节\xc2\xa0,你之前尝试的匹配方式都存在问题:
- PHP 7.0以下版本不识别
"\u00a0"这种Unicode转义写法,会解析为普通字符串 chr(160)生成的是单字节的\xa0,和UTF-8下的双字节不间断空格编码不匹配,无法命中- 部分节点值可能同时包含不间断空格和其他空白字符,单纯全等判断无法覆盖
解决方案
场景1:过滤所有仅含空白(含普通空格、换行、制表符、不间断空格)的节点
适用绝大多数场景,只要节点没有有效文本就过滤,修改后代码如下:
function getContent($xPath) { $query = "//div[@class='WordSection1']"; $elements = $xPath->query($query); if (!is_null($elements)) { $content = array(); foreach ($elements as $element){ $nodes = $element->childNodes; foreach ($nodes as $node) { // 替换所有不间断空格后去除首尾空白,判断是否有有效内容 $cleanValue = trim(str_replace("\xc2\xa0", '', $node->nodeValue)); if (!empty($cleanValue)) { // 若需要存储清洗后的值就填$cleanValue,保留原值就填$node->nodeValue $content[] = $node->nodeValue; } } } return $content; } // 补充默认返回,避免无匹配元素时返回null return []; }
场景2:仅过滤完全等于单个不间断空格的节点
和你给出的示例需求完全匹配,仅修改判断条件即可:
if ($node->nodeValue !== "\xc2\xa0") { $content[] = $node->nodeValue; }
内容的提问来源于stack exchange,提问作者BryceBy
相关产品推荐
相关产品推荐

