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

2019-10-14 22:22:54 +08:00
 xuejd3

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

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

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

5168 次点击
所在节点    PHP
3 条回复
starsriver
2019-10-14 23:01:24 +08:00
特殊符号在 utf16 编码里面顺序基本上是连续的,匹配的时候把特殊符号的编码进去就 ok。你这种匹配效率太低。至于对不对,我建议你用正则。
Liang
2019-10-14 23:02:51 +08:00
自己跑一次就知道对不对了啊
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).')';

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/609308

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX