PHPで関数に渡される中国語の値が文字化けする問題
ゲーム起動コード生成関数を作りたくて、$strを漢字にすると文字化けしてしまうという問題を発見しました。それ?
function set_randcode($str, $num, $len, $mark) {
$strs_shuffle = str_shuffle((str_shuffle(strtoupper(trim($str)))) . str_shuffle(strtoupper(trim( $ str))) . str_shuffle(strtoupper(trim($str))));
$code = Array();
for ($i = 0; $i $code[] = (substr("$strs_shuffle", mt_rand(0, (strlen($str) - $len)), $len) . $mark . substr("$strs_shuffle", mt_rand ( 0, (strlen($str) - $len)), $len) . $mark . substr("$strs_shuffle", mt_rand(0, (strlen($str) - $len)), $len) 。 mark .substr("$strs_shuffle", mt_rand(0, (strlen($str) - $len)), $len));
}
$code = array_unique($code);
$set_code = Array();
の繰り返し値 ($j = 0; $j $set_code[] = $code[$j] ;
}
return $set_code;
}
まだ学び始めたばかりなので、もっと簡単にわかりやすく説明できればと思います。
-----解決策--------------------------------
str_shuffle は文字列スクランブルをシャッフルします。操作はバイト単位で行われます。
スクランブル後、元の隣接バイトは隣接しない可能性があります。
中国語の文字は隣接バイトで表す必要があるため、必要なバイト数はエンコードによって異なります(gbk 2バイト、utf-8 3バイトなど)
元々隣接していたものが隣接しなくなって「文字化け」が発生します。
------解決策----------------------
substr() を subCNchar() に置き換えます 試してみる、おそらく str_shuffle() を渡すことはできません。ランダムな抽出、加算、減算、乗算、除算などの独自のルールを作成することをお勧めします。
/**中国語の文字をインターセプト * * $str インターセプトされる文字列 * $start インターセプトの開始位置 * $length インターセプトされる長さ * $charset 文字列エンコーディング **/ 関数 subCNchar($str, $start = 0, $length, $charset = "utf-8") { if (strlen($str) <font color="#e78608">------解決策---------</font><br>関数の前に次のように追加します: <br>mb_internal_encoding (' GBK');<br>もちろん、必ずしも GBK である必要はありません。php ファイルの文字セットに応じて変更する必要があります。 <br>さらに、画像を生成するときにロードするフォントは中国語をサポートしている必要があります。 <br><font color="#e78608">------解決策---------</font><br>ヘッダー('Content-typeを先頭に追加)ページ: text/html;charset=UTF-8');