各位大佬【鎶樺彔姝烘妞呭】这种文字怎么用正则过滤掉[已解决]

回复列表(31|隐藏机器人聊天)
  • @Ta / 2022-04-22 / /

    @无名啊@老虎会游泳,好用好用。帖子里有几个词不能还原是被我删了几个字符。刚在搜自然语言处理,好像很强大
    手机

  • @Ta / 2022-04-22 / /

    JS实现(点击“HTML代码”查看代码)。

    引用的js可从这里找到:https://github.com/bestmike007/gbk-lite

    HTML代码

  • @Ta / 2022-04-22 / /

    @老虎会游泳,js代码不显示呢,我登录了
    手机

  • @Ta / 2022-04-22 / /

    @童真再见,点击“HTML代码”

  • @Ta / 2022-04-22 / /

    @老虎会游泳,不懂js...我把代码放在网页啥都没显示
    手机

  • @Ta / 2022-04-22 / /

    @童真再见,你看不到演示结果吗?
    因为 https://hu60.cn/q.php/api.webplug-file.1_public_gbk-lite-min.js 登录可见,所以只能在虎绿林看到演示结果。如果想用于其他网站,你需要下载这个文件然后放在你站,然后修改网页中引用的链接。

    图片.png

  • @Ta / 2022-04-22 / /

    @老虎会游泳,我修改了引用的js,现在不需要登录就可见了,也能直接用于其他网站了。

  • @Ta / 2022-04-22 / /

    @老虎会游泳,嗯现在能看到了,刚才显示空白。

    $obj='我直接在php里这样写的';
    $gbk = mb_convert_encoding($obj, 'GBK', 'UTF-8'); // 文件是UTF-8的,想得到GBK字节序列需要进行编码转换
    $hex = bin2hex($gbk);
    //	echo "$v\t->\t$hex\t->\t$gbk\n<br>"; // 虽然$gbk名义上是“GBK字节序列”,但它实际上是UTF-8字节序列,所以可以直接当作UTF-8字符串输出
    if(mb_detect_encoding($gbk, 'UTF-8', true)){ // 判断结果false
    $obj=$gbk;
    }else{
    $obj=$obj;
    }
    

    微信图片_20200511182817.gif
    手机

  • @Ta / 2022-04-22 / /

    一群不愧真大佬
    小米8(白)

  • @Ta / 2022-04-22 / /

    @童真再见,嗯,这样很聪明。原本计划丢弃的内容,现在也可以正常显示了

    你给的那些例子都能完美转换吗?有没有转换不完整或者失败的例子?

    if(mb_detect_encoding($gbk, 'UTF-8', true)){ // 判断结果false
    $obj=$gbk;
    }else{
    $obj=$obj;
    }
    
  • @Ta / 2022-04-22 / /

    @老虎会游泳,有,有些转换后还会缺些字,多出个方块符号,然后我又加了个判断,计算有几个符号,小于三个直接把符号在过滤下。

    【姘存櫠鐏杩樻槸鍚搁鐏】【锟斤拷锟斤拷锟斤拷农锟矫筹拷】【鏉庡瓙锲珯涓轰粈涔埚彨鏉庡瓙锲】像这些转换后还会有很多符号我还没想到怎么处理。。。

        function utf8_count($a,$b=1)
        {
            preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/", $a, $ab);
    if($b==1){
            return count($ab[0]);
    }else{
            return implode("",$ab[0]);
    }
    
        }
    
    $objac='姘存櫠鐏ソ杩樻槸鍚搁鐏ソ'; //【鐏姱缁掗様鑵胯濂抽珮鑵】这种转换后还有少量符号的都能过滤
    $gbk = mb_convert_encoding($objac, 'GBK', 'UTF-8'); // 文件是UTF-8的,想得到GBK字节序列需要进行编码转换
    $hex = bin2hex($gbk);
    //echo "$objac\t->\t$hex\t->\t$gbk\n<br>"; // 虽然$gbk名义上是“GBK字节序列”,但它实际上是UTF-8字节序列,所以可以直接当作UTF-8字符串输出
    	if(mb_detect_encoding($gbk, 'UTF-8', true)){ // 判断结果false
    		echo $gbk;
    	}else{
    		if((mb_strlen($gbk, 'UTF-8')-utf8_count($gbk)) < 3){
    			echo utf8_count($gbk,2);
    		}else{
    			echo $objac;
    		}
    	}
    

    手机

  • @Ta / 2022-04-22 / /

    @老虎会游泳,还以为是GBK/BIG5/...存储的,误用UTF8解码了

    还想着能无损还原成Unicode码点,再编码预测来解码。。

    想想也是,这种方块字乱码,应该是误用中文编码方式解码才对

添加新回复
回复需要登录