// 中文标点 $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).')'; |