ホームページ >バックエンド開発 >PHPチュートリアル >mysql で特殊文字が検出され、不完全なデータが生成される

mysql で特殊文字が検出され、不完全なデータが生成される

WBOY
WBOYオリジナル
2016-06-23 13:42:411035ブラウズ

配列をシリアル化し、データベースのフィールドに保存しましたが、図に示すように、配列内の一部のデータ値に特殊文字が含まれています:

データベースに保存すると、次のようになります


特殊このような文字は他にもたくさんあります

データの一部が失われています。この状況に遭遇した人はいますか?教えてください。


ディスカッションへの返信 (解決策)

特殊文字とは何ですか? 文字列をbase64_encodingした後を見てください。

特殊文字とは何ですか? 文字列を Base64_encode してエクスポートして確認します。


[code=php]$str = 'Longhua


は php コードを投稿することを許可されていません


$str = 'Longhua


文字列を Base64_encoding した後に見てください。


[code=php]$str = 'Longhua
スクリーンショットを撮ったほうがいいです

実際のデータを教えてください

文字列をbase64_encodingした後に見てください。


実際のデータを提供してください


データはこれですべてです。どのデータが不足しているかわかりません。ここでは特殊文字を表示できません。

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

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



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


これはうまくいきませんね~~ そして間にスペースはあってはならない

何をしているのですか?

header('Content-type: text/html;charset=utf-8');$s = '6b6Z5Y2O8K+gpTEyMzEyMzEyMw==';$t = base64_decode($s), PHP_EOL;echo bin2hex($t);
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;  }  

Longhua

フロントデスクで何かを入力する代わりに、入力を制限してからデータベースに保存する必要があります。上司とコミュニケーションをとることができます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。