我在捕获和过滤掉一些数据附带的奇怪字符方面遇到了问题,这导致包含它的JSON数据无法正确解析。我不知道为什么,因为它没有包含在我用这个正则表达式创建的白名单中:
$string = preg_replace('/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/\s\\<>,;:.*\[\]\(\)+?¿!&%@=]/', '', $string);
在Regexr上测试正则表达式。正如您将看到的,这个奇怪的角色没有被捕获
这是它在浏览器中的显示方式:
这就是它在Pluma(Linux编辑器)中的显示方式:
例如,当我复制它并尝试将其插入Google时,不会插入任何内容。真奇怪。我从来没有遇到过这种情况。
关于如何处理它的任何想法?
答案 0 :(得分:2)
这个神秘的角色并不那么神秘但很难用你的编辑器显示,因为它是破坏页面的控制字符:Form Feed (\x0C
参见ascii表) < / p>
此字符包含在\s
字符类中,这就是您的模式与其不匹配的原因。
解决方案包括从模式中删除\s
并将其替换为允许的空格字符的详尽列表。
为了简化操作,您可以放置包含所有水平空格的类\h
(如果支持)。然后手动添加所需的垂直空白。
请注意,如果您使用的是Windows-1252代码页,请将其置于眼睛下方,以确保不会遗忘任何内容并使用字符范围缩短模式。
答案 1 :(得分:1)
我明白了!
原来这个字符代表form feed
它包含在\ s,如空格,\ t,\ r或\ n。
更具体地说,我实现了我想要的。新的正则表达式:
/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/ \r\n\\<>,;:.*\[\]\(\)+?¿!&%@=]/