ホームページ >バックエンド開発 >PHPチュートリアル >strtoupperは中国語文字化けを引き起こすのでしょうか?

strtoupperは中国語文字化けを引き起こすのでしょうか?

WBOY
WBOYオリジナル
2016-06-23 14:38:111686ブラウズ

この投稿は molaifeng によって最終編集されました: 2013-11-25 09:04:16

プロジェクトをデプロイするときに、ページを開いた後、HTML ページにネストされた php スクリプトの部分が表示されるという奇妙な問題が発生しました。文字化けしていますが、データベースは問題ありません。後でそれを見つけたところ、このコード (TP フレームワーク) で問題が発生していることがわかりました。

/** * 获取和设置语言定义(不区分大小写) * @param string|array $name 语言变量 * @param string $value 语言值 * @return mixed */function L($name=null, $value=null) {    static $_lang = array();    // 空参数返回所有定义    if (empty($name))        return $_lang;    // 判断语言获取(或设置)    // 若不存在,直接返回全大写$name    if (is_string($name)) {        echo $name, ' ';        $name = strtoupper($name);echo $name;        if (is_null($value))            return isset($_lang[$name]) ? $_lang[$name] : $name;        $_lang[$name] = $value; // 语言定义        return;    }    // 批量定义    if (is_array($name))        $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));    return;}



その後、strtoupper は mb_strtoupper に変更されました
$name = mb_strtoupper($name, 'UTF-8');

このプロジェクトが他のサーバーにデプロイされたときは、この問題は発生しませんでした。誰か説明してください。ありがとうございます。 ! !

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

すべての写真が投稿されていません

ブラウザのエンコードの問題が原因でしょうか? ファイルのエンコードを確認してください。

いいえ、問題は特定されました。それは上記のコードです

strtoupper、strto lower 以前のいくつかの php バージョンでは中国語に影響を与える問題がありました
しかし、それらはずっと前に修正されています

あなたはこれに慣れていないように感じます関数の使用にはいくつかの問題があります
この関数の元のコンテキストを離れて、この関数はいくつかのキーと値のペアを設定するだけです
定数の定義に似ています
たとえば
L('x', 'This is a question');
echo L('X '); //これは問題です
L('x', 'これは問題ではありません');
echo L('X'); //これは問題ではありません
('x'); //これは問題ありません

したがって、一般的に考えると、単純な文字の組み合わせは常に複雑な文字の組み合わせに対応するために使用されます (これは省略形です)

この関数は、次のような多言語変換に使用されます。したがって、プログラム テキストに中国語が含まれると、実行時にプログラム テキストが文字化けする可能性があります。したがって、プログラムテキスト内での漢字の使用は避けるべきです
これがこの機能の本質です

ご回答ありがとうございます! ! !

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