xuejd3
V2EX  ›  PHP

PHP 去除所有标点符号,中文当成一个字符,去除所有空格,统计实际的字数,求大佬帮忙看看,谢谢

By xuejd3 at 2019 年 10 月 14 日 · 6480 次点击

// 中文标点
$char = "。、!?:;﹑•"…‘’“”〝〞∕¦‖—〈〉﹞﹝「」‹›〖〗]  [»«』『〕〔》《﹐¸﹕︰﹔!¡?¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐­˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()";
$pattern = [
    "/[[:punct:]]/i", //英文标点符号
    '/[' . $char . ']/u', //中文标点符号
    '/[ ]{2,}/'
];

$str = preg_replace($pattern, ' ', strip_tags($tweets->content));
echo mb_strlen($str, 'UTF-8');

这样写不知道对不对,求 V 友大佬帮忙看看,谢谢大家

3 条回复  •  2019-10-30 12:35:53 +08:00
starsriver
   1
starsriver  
   2019 年 10 月 14 日 via Android
特殊符号在 utf16 编码里面顺序基本上是连续的,匹配的时候把特殊符号的编码进去就 ok。你这种匹配效率太低。至于对不对,我建议你用正则。
Liang
   2
Liang  
   2019 年 10 月 14 日 via iPhone
自己跑一次就知道对不对了啊
JingNi
   3
JingNi  
   2019 年 10 月 30 日
第二个正则错了哦,空格也可以直接[ ]这样匹配就可以
------------------------------------------------------------------------------------
// 中文标点
//这条不需要,$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).')';
© 2026 V2EX · 41ms · 3.9.8.5