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

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

  •  
  •   xuejd3 · 2019-10-14 22:22:54 +08:00 · 5377 次点击
    这是一个创建于 1896 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    // 中文标点
    $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 23:01:24 +08:00 via Android
    特殊符号在 utf16 编码里面顺序基本上是连续的,匹配的时候把特殊符号的编码进去就 ok。你这种匹配效率太低。至于对不对,我建议你用正则。
    Liang
        2
    Liang  
       2019-10-14 23:02:51 +08:00 via iPhone
    自己跑一次就知道对不对了啊
    JingNi
        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).')';
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2983 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.