Home > Backend Development > PHP Tutorial > mysql 遇到特殊字符,造成了数据不全

mysql 遇到特殊字符,造成了数据不全

WBOY
Release: 2016-06-23 13:42:41
Original
1035 people have browsed it

我是把数组序列化之后存入数据库的某个字段,但是数组中有些数据的值带有特殊字符,如图:

保存在数据库之后就成这样子了


类似这样的特殊字符还有很多的;

丢失了一部分数据,哪位哥哥遇到过这种情况吗?请赐教。


回复讨论(解决方案)

什?特殊字符,把字符串base64_encode後?出?看看。

什?特殊字符,把字符串base64_encode後?出?看看。


[code=php]$str = '龙华


竟然不让贴php代码


$str = '龙华


什?特殊字符,把字符串base64_encode後?出?看看。


[code=php]$str = '龙华
我还是截图吧

请给出真实的数据

什?特殊字符,把字符串base64_encode後?出?看看。


请给出真实的数据


数据就是那些,我不知道还缺哪些数据? 特殊的字符我这里显示不出来。

header('Content-type: text/html;charset=utf-8');$s = '6b6Z5Y2O8K+gpQ==';echo $t = base64_decode($s), PHP_EOL;echo bin2hex($t);
Copy after login
Copy after login
龙华

header('Content-type: text/html;charset=utf-8');$s = '6b6Z5Y2O8K+gpQ==';echo $t = base64_decode($s), PHP_EOL;echo bin2hex($t);
Copy after login
Copy after login
龙华



header('Content-type: text/html;charset=utf-8');$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';echo $t = base64_decode($s), PHP_EOL;echo pack("H*", bin2hex($t));
Copy after login


这样的就不行诶~~ 而且中间应该不是空格

你在做什么?

header('Content-type: text/html;charset=utf-8');$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';$t = base64_decode($s), PHP_EOL;echo bin2hex($t);
Copy after login
e9be99e58d8e f0afa0a5313233313233313233

不是跟你说了吗?那是表情符,PC 中的浏览器都是不会显示的

因为前端阻止不了用户的输入,需要后端过滤掉这些数据,然后才插入数据库的。
不然数据库里显示的信息不全。

把不是utf8的字符??就可以了。

header('Content-type: text/html;charset=utf-8');$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';$t = base64_decode($s). PHP_EOL;echo $t.'<br>';echo filter_utf8_char($t);/** ??字符串,保留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;  }  
Copy after login

龙华

不是前台输入什么,数据库就要存什么的,输入要做一下限制,然后再存。可以跟上级沟通一下。

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template