// 中文标点
$char = "。、!?:;﹑•"…‘’“”〝〞∕¦‖—〈〉﹞﹝「」‹›〖〗] [»«』『〕〔》《﹐¸﹕︰﹔!¡?¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()";
$pattern = [
"/[[:punct:]]/i", //英文标点符号
'/[' . $char . ']/u', //中文标点符号
'/[ ]{2,}/'
];
$str = preg_replace($pattern, ' ', strip_tags($tweets->content));
echo mb_strlen($str, 'UTF-8');
这样写不知道对不对,求 V 友大佬帮忙看看,谢谢大家
1
starsriver 2019-10-14 23:01:24 +08:00 via Android
特殊符号在 utf16 编码里面顺序基本上是连续的,匹配的时候把特殊符号的编码进去就 ok。你这种匹配效率太低。至于对不对,我建议你用正则。
|
2
Liang 2019-10-14 23:02:51 +08:00 via iPhone
自己跑一次就知道对不对了啊
|
3
JingNi 2019-10-30 12:35:53 +08:00
第二个正则错了哦,空格也可以直接[ ]这样匹配就可以
------------------------------------------------------------------------------------ // 中文标点 //这条不需要,$char = "。、!?:;﹑•"…‘’“”〝〞∕¦‖—〈〉﹞﹝「」‹›〖〗] [»«』『〕〔》《﹐¸﹕︰﹔!¡?¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()"; $content = '请看 :ABC,123456_!'; $pattern = [ "/[[:punct:]]/i", //英文标点符号 "/[\x7f-\xff]/", //中文标点符号,包括中文 '/[ ]/' //直接匹配空格 ]; $str = preg_replace($pattern[2], ' ', $content); foreach($pattern as $patternValue) { $str = preg_replace($patternValue, '', $str); } echo $str.'(length:'.strlen($str).')'; |