如何去除网页抓取文本中的特殊符号(如’、‘)?
问题解答
一、这些特殊标点是什么?
你遇到的’(右单引号)、‘(左单引号)属于智能引号(又称弯引号、排版引号),是网页为提升排版美观度使用的印刷体标点,和普通直引号'不属于同一字符。这类标点常见于使用富文本编辑器的网页、博客或文档类站点,属于排版规范里的替代格式,但会对文本自动化处理造成干扰。
二、如何去除或替换?
可以通过字符串替换、正则匹配等方式处理,以下是几种PHP实现方案:
直接字符串替换
用str_replace把智能引号替换为普通直引号,若存在其他智能标点也可一并处理:// 替换左、右单引号为普通单引号 $cleanedData = str_replace(['‘', '’'], "'", $jsonData); // 可选:同时替换智能双引号为普通双引号 $cleanedData = str_replace(['“', '”'], '"', $cleanedData); // 处理后再解码JSON $decodedData = json_decode($cleanedData);正则批量替换
若存在更多特殊排版符号,可通过匹配Unicode编码范围批量替换:// 替换智能单引号(Unicode编码U+2018、U+2019) $cleanedData = preg_replace('/[\x{2018}\x{2019}]/u', "'", $jsonData); // 替换智能双引号(Unicode编码U+201C、U+201D) $cleanedData = preg_replace('/[\x{201C}\x{201D}]/u', '"', $cleanedData); $decodedData = json_decode($cleanedData);抓取阶段预处理
若使用cURL、Goutte等工具抓取网页,可在提取内容前先清洗HTML,避免后续JSON编解码出现问题:// 假设$html为抓取到的网页内容 $cleanedHtml = str_replace(['‘', '’'], "'", $html); // 从清洗后的HTML中提取目标内容,再生成JSON字符串
内容的提问来源于stack exchange,提问作者Primarch_Guilleman
相关产品推荐
相关产品推荐

