首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

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

  •  
  •   xuejd3 · 52 天前 · 1840 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    // 中文标点
    $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
        1
    starsriver   52 天前 via Android
    特殊符号在 utf16 编码里面顺序基本上是连续的,匹配的时候把特殊符号的编码进去就 ok。你这种匹配效率太低。至于对不对,我建议你用正则。
        2
    Liang   52 天前 via iPhone
    自己跑一次就知道对不对了啊
        3
    JingNi   37 天前
    第二个正则错了哦,空格也可以直接[ ]这样匹配就可以
    ------------------------------------------------------------------------------------
    // 中文标点
    //这条不需要,$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).')';
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4066 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 07:48 · PVG 15:48 · LAX 23:48 · JFK 02:48
    ♥ Do have faith in what you're doing.