目次
PHPレベルでUTF-8を扱う方法
ファイル IO 操作で UTF-8 を処理する方法
Mysql と UTF-8 のベスト プラクティス
ブラウザとUTF-8のベストプラクティス
オペレーティングシステムとUTF-8のベストプラクティス
ホームページ バックエンド開発 PHPチュートリアル PHP と UTF-8 のベスト プラクティス

PHP と UTF-8 のベスト プラクティス

Jan 23, 2017 pm 03:08 PM

この記事は「PHP、文字列、エンコーディング、UTF-8」関連知識の後編です。まず結論 - PHP のあらゆる面で UTF-8 エンコーディングを使用してください

PHPの言語レベルはUnicode文字セットをサポートしていませんが、ほとんどの問題はUTF-8エンコーディングで解決できます。

ベストプラクティスは、入力エンコーディングを明確に把握し(知らない場合は検出する)、内部で一律にUTF-8エンコーディングに変換し、出力エンコーディングも一律にUTF-8エンコーディングにすることです。

PHPレベルでUTF-8を扱う方法

Unicode文字セットを操作する場合は、必ずmbstring拡張機能をインストールし、ネイティブ文字列関数の代わりに対応する関数を使用してください。たとえば、ファイルが UTF-8 PHP コードとしてエンコードされており、strlen() 関数を使用するのが間違っている場合は、代わりに mb_strlen() 関数を使用してください。

mbstring 拡張機能のほとんどの関数は、エンコーディング (内部エンコーディング) に基づいて処理する必要があります。これのほとんどは PHP.INI で設定できます。

PHP 5.6 以降、default_charset 設定で mbstring.http_input、mbstring.http_output を置き換えることができます。

もう 1 つの重要な設定は mbstring. language です。デフォルト値はニュートラル (UTF-8) です。

ファイルのエンコーディングとmbstring拡張子の内部エンコーディングは同じ概念ではないことに注意してください。

まとめると、

  • PHP.INI では、mbstring の拡張に関わる部分は可能な限り UTF-8 を使用しています。

  • ネイティブ文字列操作関数の代わりにmbstring拡張関数を使用してください。

  • 関連関数を使用する場合は、操作する文字のエンコーディングを必ず理解してから、htmlentities()関数の第3引数などに記述されているUTF-8エンコーディングのパラメータを表示してください。 UTF-8で。

ファイル IO 操作で UTF-8 を処理する方法

ここで例を示します。ファイルを開きたいが、ファイルの内容がどのようなエンコーディングであるかわからない場合、どう対処すればよいでしょうか。

ベストプラクティスは、開くときに一律にUTF-8に変換し、内容を変更した後に元のエンコーディングに戻してファイルに保存することです。コードを見てください:

if ( mb_internal_encoding()!="UTF-8") {
        mb_internal_encoding("UTF-8");
}
 
$file = "file.txt"; //一个编码为gbk的中文文件
$str= file_get_contents($file);
//不管来源是什么编码,统一显示的时候转换为 UTF-8
 if (mb_check_encoding($str,"GBK"))
    $str =  mb_convert_encoding($str,"UTF-8",“GBK”);
 
$str ="修改内容";
$str =  mb_convert_encoding($str,$srcbm,"UTF-8"); //原样转回去
file_put_contents($file,$str);
ログイン後にコピー

Mysql と UTF-8 のベスト プラクティス

これは比較的簡単です。まず、Mysql が UTF-8 であることを確認します。次に、Mysql クライアントも接続時に UTF-8 を維持します。特に PHP では、imysql または PDO 拡張機能が Mysql に接続するときに、両方の側が一貫していれば、通常は問題は発生しません。

ブラウザとUTF-8のベストプラクティス

これも比較的単純です。つまり、出力コンテンツがWebページの場合、文字列処理の出力は常にUTF-8として維持される必要があります、同時にPHP。 .INI も、default_charset は明示的に UTF-8 に設定され、HTML のメタ タグも明確に UTF-8 としてマークされます。

これで大丈夫ですか? いいえ、サーバーとブラウザーではユーザーが UTF-8 エンコーディングを使用することを許可していますが、ユーザーは他のエンコーディングで文字を入力したり、ファイル名を他のエンコーディングでアップロードしたりする可能性があります。やるべきですか?ユーザーのエンコーディングは mb_http_input() 関数と mb_check_encoding() 関数によって検出され、内部で UTF-8 に変換されます。どのレベルでも、最終処理は UTF-8 エンコードであることを確認してください。つまり、入力がどのようなエンコーディングであるか、処理後のコントロール出力のエンコーディングが UTF-8 であるかを知る方法が必要です。

mbstring.encoding_translation ディレクティブと mb_detect_encoding() 関数の使用は推奨されません。長い間私を拷問しました。

オペレーティングシステムとUTF-8のベストプラクティス

オペレーティングシステムにより、PHPはUnicodeファイル名を処理する際の処理メカニズムが異なります。

Linux ではファイル名は常に UTF-8 でエンコードされますが、中国の Windows 環境ではファイル名は常に GBK でエンコードされます。これだけは覚えておいてください。

例で説明します:

//命令行程序函数,运行在中文版 Windows 10 操作系统 ,文件编码为 UTF-8
 function filenameexample() {
    $filename = "测试.txt" ;
    $gbk_filename = iconv("UTF-8","GBK",$filename);
    file_put_contents($gbk_filename, "测试");
    echo file_get_contents($gbk_filename);
}
 function scandirexample() {
    $arr = scandir("./tmp");
    foreach ($arr as $v) {
        if ($v == "." || $v =="..")
            continue ;
        $filename = iconv( "GBK","UTF-8",$v ) ;
        $content = file_get_contents("./tmp/" . $v );
    }
}
ログイン後にコピー

Windows と Linux と互換性のあるプログラムを書きたくない場合は、次のようにファイル名を URL コード化できます:

function urlencodeexample() {
   $filename = "测试2.txt" ;
   $urlencodefilename = urlencode($filename) ;
   file_put_contents($urlencodefilename, "测试");
   echo file_get_contents($urlencodefilename);
}
ログイン後にコピー

PHP を使用して次のことを行うときは、これも考慮する必要があります。 header() 関数を使用してファイルをダウンロードする ブラウザーとオペレーティング システム (ほとんどの人は Windows を使用します)、Chrome の場合、出力ファイル名のエンコーディングは UTF-8 にすることができ、Chrome はファイル名を GBK エンコーディングに自動的に変換します。

IE の下位バージョンの場合、オペレーティング システム環境を継承するため、ダウンロードされたファイル名が中国語の場合は、UTF-8 エンコードにトランスコードする必要があります。そうしないと、ダウンロード時にユーザーに文字化けしたファイル名が表示されます。コードで説明:

$agent=$_SERVER["HTTP_USER_AGENT"];
if(strpos($agent,'MSIE')!==false  {
    $filename = iconv("UTF-8","GBK","附件.txt");
    header("Content-Disposition: attachment; filename=\"$filename\"");
}
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

See all articles