首页 > 后端开发 > php教程 > 请问这个字符是什么东西?

请问这个字符是什么东西?

WBOY
发布: 2016-06-20 12:37:44
原创
1340 人浏览过

页面显示空格,base64_encode结果:Hw==

类似这种空格有没办法完全过滤掉?我已经用iconv转成gbk再转回来了,还是过滤不了。

$str = iconv('UTF-8', 'GBK//IGNORE', strip_tags($str));$str = iconv('GBK', 'UTF-8//IGNORE', $str)
登录后复制


回复讨论(解决方案)

/** 過濾字符串,保留UTF8字母數字中文及部份符號 *   @param  String  $ostr *   @return String */  function filter_utf8_char($ostr){      preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $ostr, $matches);      $str = join('', $matches[0]);      if($str==''){   //含有特殊字符需要逐個處理          $returnstr = '';          $i = 0;          $str_length = strlen($ostr);          while ($i<=$str_length){              $temp_str = substr($ostr, $i, 1);              $ascnum = Ord($temp_str);              if ($ascnum>=224){                  $returnstr = $returnstr.substr($ostr, $i, 3);                  $i = $i + 3;              }elseif ($ascnum>=192){                  $returnstr = $returnstr.substr($ostr, $i, 2);                  $i = $i + 2;              }elseif ($ascnum>=65 && $ascnum<=90){                  $returnstr = $returnstr.substr($ostr, $i, 1);                  $i = $i + 1;              }elseif ($ascnum>=128 && $ascnum<=191){ // 特殊字符                  $i = $i + 1;              }else{                  $returnstr = $returnstr.substr($ostr, $i, 1);                  $i = $i + 1;              }          }          $str = $returnstr;          preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $str, $matches);          $str = join('', $matches[0]);      }      return $str;  }  
登录后复制
登录后复制
登录后复制

echo bin2hex(base64_decode('Hw=='));
1f US (unit separator) 单元分隔符

之前做过多年底层开发(汇编、C),不熟悉玩不转

之前做过多年底层开发(汇编、C),不熟悉玩不转



怪不得,原来是高手哇。汇编牛b的都是牛人。

/** 過濾字符串,保留UTF8字母數字中文及部份符號 *   @param  String  $ostr *   @return String */  function filter_utf8_char($ostr){      preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $ostr, $matches);      $str = join('', $matches[0]);      if($str==''){   //含有特殊字符需要逐個處理          $returnstr = '';          $i = 0;          $str_length = strlen($ostr);          while ($i<=$str_length){              $temp_str = substr($ostr, $i, 1);              $ascnum = Ord($temp_str);              if ($ascnum>=224){                  $returnstr = $returnstr.substr($ostr, $i, 3);                  $i = $i + 3;              }elseif ($ascnum>=192){                  $returnstr = $returnstr.substr($ostr, $i, 2);                  $i = $i + 2;              }elseif ($ascnum>=65 && $ascnum<=90){                  $returnstr = $returnstr.substr($ostr, $i, 1);                  $i = $i + 1;              }elseif ($ascnum>=128 && $ascnum<=191){ // 特殊字符                  $i = $i + 1;              }else{                  $returnstr = $returnstr.substr($ostr, $i, 1);                  $i = $i + 1;              }          }          $str = $returnstr;          preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $str, $matches);          $str = join('', $matches[0]);      }      return $str;  }  
登录后复制
登录后复制
登录后复制



请问,这个正则会不会匹配不到全角的逗号,顿号等汉语标点符号呢?还有斜杠、反斜杠这些会不会过滤掉呢?


/** 過濾字符串,保留UTF8字母數字中文及部份符號 *   @param  String  $ostr *   @return String */  function filter_utf8_char($ostr){      preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $ostr, $matches);      $str = join('', $matches[0]);      if($str==''){   //含有特殊字符需要逐個處理          $returnstr = '';          $i = 0;          $str_length = strlen($ostr);          while ($i<=$str_length){              $temp_str = substr($ostr, $i, 1);              $ascnum = Ord($temp_str);              if ($ascnum>=224){                  $returnstr = $returnstr.substr($ostr, $i, 3);                  $i = $i + 3;              }elseif ($ascnum>=192){                  $returnstr = $returnstr.substr($ostr, $i, 2);                  $i = $i + 2;              }elseif ($ascnum>=65 && $ascnum<=90){                  $returnstr = $returnstr.substr($ostr, $i, 1);                  $i = $i + 1;              }elseif ($ascnum>=128 && $ascnum<=191){ // 特殊字符                  $i = $i + 1;              }else{                  $returnstr = $returnstr.substr($ostr, $i, 1);                  $i = $i + 1;              }          }          $str = $returnstr;          preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00ff}|\x{4e00}-\x{9fff}]+/u', $str, $matches);          $str = join('', $matches[0]);      }      return $str;  }  
登录后复制
登录后复制
登录后复制



请问,这个正则会不会匹配不到全角的逗号,顿号等汉语标点符号呢?还有斜杠、反斜杠这些会不会过滤掉呢?

不会,因为这些都是可以显示的字符。
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板