ホームページ バックエンド開発 PHPチュートリアル PHP の文字列、エンコーディング、UTF-8 コードの詳細な説明

PHP の文字列、エンコーディング、UTF-8 コードの詳細な説明

Mar 06, 2017 am 09:54 AM

最近コーディングに関する記事をよく読んでいるので、「PHP、文字列、エンコーディング、UTF-8」関連の知識について 2 つのブログ記事に分けて説明します。このブログ記事は前半で、大きく 4 つの部分に分かれています。つまり、「文字列の定義と使用」、「文字列変換」、「PHP 文字列の性質」、「マルチバイト文字列」です。前半は比較的基本的なもので、次の記事「PHP と UTF-8 のベスト プラクティス」に詳細な情報が記載されている可能性があります。

文字列の定義と使用法

PHP で文字列を設定するには 4 つの方法があります:

一重引用符文字列

一重引用符で囲まれた文字列は、Python の生の文字列に似ています。つまり、一重引用符で囲まれた文字列には、変数解析関数や特殊文字エスケープ関数がありません。たとえば、 $str='hellonworld', n には改行関数がありません。

二重引用符文字列

二重引用符で囲まれた文字列には、一重引用符で囲まれた文字列にはない変数解析関数と特殊文字エスケープ関数があります。

個人的には、16 進数と 8 進数の文字列の特殊なエスケープに非常に興味があります。特別な追加:

\[0-7]{1,3} #八进制表达方式
\x[0-9A-Fa-f]{1,2} #十六进制表达方式
ログイン後にコピー

ヒアドキュメント

この式は Python の長い文字列に似ており、複数行を含む文字列を定義できます。文法上の定義は非常に厳密なので、使用する場合は注意が必要です。

りー

ナウドック

Nowdoc は一重引用符で囲まれた文字列に似ており、変数を解析しません。特殊文字をエスケープせずにテキストの大部分を定義する場合に適しています。

変数分析

PHP 文字列の最も強力な部分は変数解析です。変数解析では、実行時のコンテキストに応じて変数を解析できます (これはインタープリタ型言語です)。これにより、多くの素晴らしい用途が生まれます。

単純な変数解析とは、文字列に「変数」、「配列」、および「オブジェクト属性」を含めることができることを意味し、複雑な構文規則では、演算に (式の形成に) {} 記号が使用されます。

例を通して変数解析の威力を見てみましょう

$str=<<<EOD
hello\n
world
EOD;
ログイン後にコピー

文字列変換

PHP 言語が Python よりも単純であるもう 1 つの理由は、型の暗黙的な変換であり、これにより多くの操作が簡素化されます。これについては、ここでは文字列変換を通じて説明します。

文字列型強制

class beers {
    const softdrink = &#39;softdrink&#39;;
    public static $ale = &#39;ale&#39;;
    public $data = array(1,3,"k"=>4);
}

$softdrink = "softdrink";
$ale = "ale";
$arr = array("arr1","arr2","arr3"=>"arr4","arr4"=>array(1,2));
$arr4 = "arr4";
$obj = new beers;
echo "line1:{$arr[1]}\n";
echo "line2:{$arr[&#39;arr4&#39;][0]}\n"; 
echo "line3:{$obj->data[1]}\n";
echo "line4:{${$arr[&#39;arr3&#39;]}}\n";
echo "line5:{${$arr[&#39;arr3&#39;]}[1]}\n";
echo "line6:{${beers::softdrink}}\n";
echo "line7:{${beers::$ale}}\n";
ログイン後にコピー

strval() 関数は、変数の文字列値を取得します:

$var = 10 ;
$dvar = (string)$var ;
echo $dvar . "_" . gettype($dvar);
ログイン後にコピー

settype() 関数は、変数の型を設定します:

$var = 10.2 ;
$dvar = strval($var) ;
echo gettype($var) . "_" . $dvar . "_" . gettype($dvar);
ログイン後にコピー

強制的な型変換のプロセスでは、他の型の値を文字列に変換するときに、特定のルールに従います。たとえば、TRUE のブール値は文字列「1」に変換されます。関連するルールを理解しておくことが最善です。

自動型変換

上記の 2 つの変換は表示変換ですが、さらに注意が必要なのは、文字列を必要とする式では自動的に型に変換されます。詳しくは、

$str = "10hello";
settype($str, "integer");
echo $str ;
ログイン後にコピー

の例を参照してください。 PHP文字列の本質

PHP ドキュメントからの説明を引用します:

PHP の文字列は、バイトの配列にバッファ長を指定する整数を加えたものとして実装されます。バイトを文字に変換する方法に関する情報はなく、プログラマが決定する必要があります。文字列内のどこにでも出現できる値 0 のバイトなど、文字列を構成する値に制限はありません。

PHP では、文字列のエンコード方法はプログラマによって異なります。文字列は、PHP ファイルのエンコードに従ってエンコードされます。たとえば、ファイルのエンコードが GBK の場合、コードの内容は GBK になります。

バイナリ セーフティの概念を補足するために、値 0 (NULL) のバイトは文字列内の任意の位置に存在することができ、PHP の一部の非バイナリ関数の最下層は呼び出される C 関数であり、文字は無視されます。 NULL の後。

PHP のファイル エンコーディングが ASCII と互換性がある限り、文字列操作を適切に処理できます。ただし、文字列操作は (ファイルのエンコーディングに関係なく) 本質的にネイティブであるため、使用する場合は注意する必要があります:

  • 一部の関数は、文字列がシングルバイトでエンコードされていることを前提としていますが、バイトを特定の文字として解釈する必要はありません。たとえば、sbustr() 関数です。

  • 多くの関数はエンコード パラメータを明示的に渡す必要があります。そうでない場合は、htmlentities() 関数などのデフォルト値が PHP.INI ファイルから取得されます。

  • ローカル領域に関連する関数もいくつかありますが、これらの関数はシングルバイトでのみ動作します。

通常の状況では、PHP は内部的に Unicode 文字をサポートしていませんが、UTF-8 エンコーディングをサポートしています。ほとんどの場合、問題はありませんが、次の状況は処理されない可能性があります。 UTF-8 以外でエンコードされた文字列を変換する方法

  • UTF-8 でエンコードされた Web ページですが、ユーザーがフォームを送信するときに GBK エンコードを使用する可能性があります (メタ タグに準拠していません)

  • UTF-8 でエンコードされた PHP ファイルで、strlen("China") を使用すると、実際の文字数 (2) の代わりに 6 が返されます

では、この問題をどうやって解決すればいいのでしょうか? PHP は mbstring 拡張機能を提供します。

マルチバイト文字列

mbstring 拡張機能はデフォルトでは有効になっていません。インストール時に --enable-mbstring が必要です。

まずは PHP.INI の mbstring ディレクティブの構成を見てみましょう。徐々に理解するのに時間がかかりました。

  • パラメータ mbstring. language を UTF-8 として理解しました

  • mbstring.internal_encoding このエンコーディングは、PHP ファイルのエンコーディングとは何の関係もありません。ほとんどの mbstring 関数では、明示的に指定しない場合、処理される文字列のエンコーディングを指定する必要があるだけです。このパラメータの値は、PHP の上位バージョンではデフォルトで取得されます。代わりに、default_charset パラメータが使用されます。

  • mbstring.http_input このパラメータは、HTTP 入力のデフォルトのエンコードを指定します (GET パラメータを除く)。通常、HTML ページのエンコーディングと一致しており、このパラメータの値は、default_charset パラメータに置き換えられます。

  • mbstring.http_output このパラメータは、HTTP 出力とは何ですか? PHP 出力は単なるページではないのですか?

  • mbstring.encoding_translation に注目してみましょう。これがオンになっている場合、PHP は POST 変数とアップロードされたファイルの名前を mbstring.internal_encoding で指定された値に自動的に変換します。中国語の名前のファイルをアップロードできることをテストしました。これを閉じて、関連する問題をプログラマに対処させることをお勧めします。

後で mbstring によって拡張されたいくつかの関数を見てみましょう:

  • mb_http_input(): HTTP 入力文字エンコーディングを検出し、ファイルアップロードのファイル名を処理する必要があることを検出します。

  • mb_convert_encoding(): よく使用される関数です。3 番目のパラメータに注意してください。

  • mb_detect_order(): 文字エンコーディングの検出順序を設定/取得します。

  • mb_list_encodings(): システムでサポートされているエンコーディング リストを返します。

重要な注意事項: PHP ファイルは特定のエンコーディングをサポートし、ASCII 互換である必要があります。

ただし、特に文字列が識別子またはリテラルの形式で表示される場合は、PHP ファイルのエンコーディングとして BIG-5 を使用しないでください。実際の PHP ファイルのエンコーディングが BIG-5 である場合は、入力コンテンツと出力コンテンツを UTF-8 に変換してみてください。

Zend マルチバイト

最後に、Zend Multibyte の概念について話します。私はそれをあまり深く理解していません。まず、これを mbstring 拡張子と混同しないでください。 Zend マルチバイト モードはデフォルトではオフになっていますが、zend.multibyte コマンドを使用してオンにできます。次に、declare() 関数を使用して PHP パーサーのエンコーディングを指定します。

では、この指示にはどのような意味があるのでしょうか?上で述べたように、PHP ファイルのエンコーディングは ASCII 互換である必要があるため、BIG-5 のような互換性のない ASCII エンコーディングをどうするかは、PHP パーサーが mbstring.script_encoding エンコーディングを読み取ってこれを使用するときに実行できます。 PHP ファイルを解析するためのエンコーディング。

上記は、PHP の文字列、エンコーディング、および UTF-8 コードの詳細な説明です。さらに関連するコンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

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.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

See all articles