关于零宽度隐藏字符\u200b|\u202d|\u202c

2021-05-14  本文已影响0人  Firstmeet初见

1、复现

<?php
// 示例
header("Content-type: text/html; charset=utf-8");
$str = '你好';
var_dump(mb_strlen($str)); # 输出结果 int(4)
让隐藏字符显现
var_dump(json_encode($str)); # 输出结果 string(26) ""\u4f60\u597d\u200b\u200b""

很明显后面多了两个隐藏的字符\u200b

2、处理
js过滤处理

function filter_str(str) {
    return str.replace(/[\u200b-\u200f\uFEFF\u202a-\u202e]/g, "");
}

php过滤处理

function filter_str(str) {
    $str = json_encode($str); // 转换为Unicode编码

    $patterns     = ['/®/', '/&#8203;/', '#\\\u200b#us']; // 正则表达式
    $replacements = ['', '', '']; // 替换成的字符

    $str = preg_replace($patterns, $replacements, $str);

    $str = json_decode($str, true); //解码Unicode编码
    return $str;
}

参考链接:https://blog.csdn.net/wuxianbing2012/article/details/107206020

上一篇 下一篇

猜你喜欢

热点阅读