V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
xuejd3
V2EX  ›  PHP

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

  •  
  •   xuejd3 · Oct 14, 2019 · 6063 views
    This topic created in 2390 days ago, the information mentioned may be changed or developed.
    
    // 中文标点
    $char = "。、!?:;﹑•"…‘’“”〝〞∕¦‖—〈〉﹞﹝「」‹›〖〗]  [»«』『〕〔》《﹐¸﹕︰﹔!¡?¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐­˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()";
    $pattern = [
        "/[[:punct:]]/i", //英文标点符号
        '/[' . $char . ']/u', //中文标点符号
        '/[ ]{2,}/'
    ];
    
    $str = preg_replace($pattern, ' ', strip_tags($tweets->content));
    echo mb_strlen($str, 'UTF-8');
    
    

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

    3 replies    2019-10-30 12:35:53 +08:00
    starsriver
        1
    starsriver  
       Oct 14, 2019 via Android
    特殊符号在 utf16 编码里面顺序基本上是连续的,匹配的时候把特殊符号的编码进去就 ok。你这种匹配效率太低。至于对不对,我建议你用正则。
    Liang
        2
    Liang  
       Oct 14, 2019 via iPhone
    自己跑一次就知道对不对了啊
    JingNi
        3
    JingNi  
       Oct 30, 2019
    第二个正则错了哦,空格也可以直接[ ]这样匹配就可以
    ------------------------------------------------------------------------------------
    // 中文标点
    //这条不需要,$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).')';
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2426 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:25 · PVG 13:25 · LAX 22:25 · JFK 01:25
    ♥ Do have faith in what you're doing.