ホームページ  >  記事  >  バックエンド開発  >  関数によって渡される文字化けした中国語値に関する PHP 関連の問題

関数によって渡される文字化けした中国語値に関する PHP 関連の問題

WBOY
WBOYオリジナル
2016-06-13 13:27:361017ブラウズ

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() を渡すことはできません。ランダムな抽出、加算、減算、乗算、除算などの独自のルールを作成することをお勧めします。

PHP コード

    /**中国語の文字をインターセプト *
     * $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');
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。