ホームページ >バックエンド開発 >PHPチュートリアル >mysql で特殊文字が検出され、不完全なデータが生成される
配列をシリアル化し、データベースのフィールドに保存しましたが、図に示すように、配列内の一部のデータ値に特殊文字が含まれています:
データベースに保存すると、次のようになります
特殊このような文字は他にもたくさんあります
データの一部が失われています。この状況に遭遇した人はいますか?教えてください。
特殊文字とは何ですか? 文字列をbase64_encodingした後を見てください。
特殊文字とは何ですか? 文字列を Base64_encode してエクスポートして確認します。
は php コードを投稿することを許可されていません
$str = 'Longhua
文字列を Base64_encoding した後に見てください。
実際のデータを教えてください
文字列を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
フロントエンドはユーザー入力を妨げることができないため、バックエンドはデータベースにデータを挿入する前にデータをフィルターで除外する必要があります。
そうしないと、データベースに表示される情報が不完全になります。
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
フロントデスクで何かを入力する代わりに、入力を制限してからデータベースに保存する必要があります。上司とコミュニケーションをとることができます。