IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    用户输入看不见的特殊符号,导致UI错乱

    linuxphp@qq.com(keminar)发表于 2017-05-10 14:11:00
    love 0
    贵贵的博客 ( http://blog.linuxphp.org/ ) :
    今天客户端反馈一个问题用户说的话顺序都反了, 查了下好像昵称里多了什么特殊字符
     
    数据库查询,没有什么不同:
     
    select * from user where id=587618\G
    *************************** 1. row ***************************
                 id: 587618
               nick: 49‭‏筱喜
     
    复制结果到vim里
    select * from user where id=587618\G
    *************************** 1. row ***************************
                 id: 587618
               nick: 49<202d><200f>筱喜
     
    这个"<202d><200f>"是什么鬼, 在网页里用F12查看源代码 是 这样的 "nick: 49&#8237;&rlm;筱喜"

    搜索  &#8237 得到此解读:https://en.wikipedia.org/wiki/Right-to-left_mark

     

    后面在这里找到了用PHP怎么替换

    https://github.com/Pasvaz/laravel-skeleton/blob/master/application/libraries/localizeddate.php

    整理一下,方便使用

    function stripLRMRLM($inputText)
        {
            // UTF8 control codes affecting the BiDirectional algorithm (see http://www.unicode.org/reports/tr9/)
            $CH_UTF8_LRM = "\xE2\x80\x8E"; // U+200E  (Left to Right mark:  zero-width character with LTR directionality)
            $CH_UTF8_RLM = "\xE2\x80\x8F"; // U+200F  (Right to Left mark:  zero-width character with RTL directionality)
            $CH_UTF8_LRO = "\xE2\x80\xAD"; // U+202D  (Left to Right override: force everything following to LTR mode)
            $CH_UTF8_RLO = "\xE2\x80\xAE"; // U+202E  (Right to Left override: force everything following to RTL mode)
            $CH_UTF8_LRE = "\xE2\x80\xAA"; // U+202A  (Left to Right embedding: treat everything following as LTR text)
            $CH_UTF8_RLE = "\xE2\x80\xAB"; // U+202B  (Right to Left embedding: treat everything following as RTL text)
            $CH_UTF8_PDF = "\xE2\x80\xAC"; // U+202C  (Pop directional formatting: restore state prior to last LRO, RLO, LRE, RLE)
    
            $notvalid=array($CH_UTF8_LRM, $CH_UTF8_RLM, $CH_UTF8_LRO, $CH_UTF8_RLO, $CH_UTF8_LRE, $CH_UTF8_RLE, $CH_UTF8_PDF, "&lrm;", "&rlm;", "&LRM;", "&RLM;");
            return str_replace($notvalid, "", $inputText);
        }

     



沪ICP备19023445号-2号
友情链接