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\""); }

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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