phpのtrim関数の詳細な分析

不言
不言転載
2019-03-01 13:26:093313ブラウズ

この記事は、PHP トリム関数の詳細な分析を提供します。一定の参考値があります。必要な友人は参照できます。お役に立てば幸いです。 . 役に立ちます。

文字列処理は、どのプログラムでも最も一般的です。 PHPのtrim関数は、文字列から文字列を削除するために使用されます。最も一般的に使用されるのはスペースを削除することです。しかし、この単純な関数は本当にあなたが思っているほど単純なのでしょうか?

トリム関数は次のように定義されています:

trim は両側から削除され、ltrim は左側から削除され、rtrim は右側から削除されます。PHP ソース コードでは、これらは次のように定義されています。最終的には関数を通じて処理されます。つまり、私がトリムについて話しているのは、PHP 内での統合トリムのことです。

ソース コードは、ext/standard/string.c の php_trim 関数にあります。

trim関数の処理ロジック:

1. 削除内容が設定されているかを判定し、設定されていない場合はデフォルトの文字列を削除します。削除コンテンツの長さ (1 文字、複数文字に分割) 1 文字が削除される場合:

左側の削除の場合、文字列の各文字をトラバースし、what と等しくない最初の文字の位置を新しい文字列の開始位置として使用し、 length

右側の削除の場合は、右からトラバースを開始し、what に等しくない最初の文字を見つけて、文字列の長さからトラバース数を減算します。

この時点で、新しい文字列の開始位置と長さが決まりますので、文字列代入コピーコマンドを実行すると、削除後の文字列が返されます。 :

まず、マスク データを使用して、削除する必要がある文字列をマークします (マスクは、文字 ASCII 値をキー値として持つハッシュ テーブルとして理解できます)。この操作は文字の削除と似ていますが、終了条件が文字テーブルにない最初の要素を見つけることである点が異なります。

デフォルト:

処理方法は以前と同じですが、内容が ASCII コードが 32 未満の文字 (スペースなど) に限定される点が異なります。そして、「\r」、「\t」、「\v」、「\0」、「\n」の文字のみを削除してください。

これを見て、次の点を学びました。

1. Trim はデフォルトで '\r'、'\t'、'\v'、'\0'、'\n' を削除します

2. Trim はループ操作として 1 つの文字を与えます。終了条件は最初の不等文字

3 です。複数の文字をトリムして削除します。これは、リストにない最初の文字が見つかるまでループ削除です。

php_charmask 関数を見てみましょう

途中の省略された部分を見る必要はありません。これは不正なデータに対するエラーが返されるだけです。

最初の if の内容を見てください。文字列が渡されると、what='a...f' とみなされます。入力ポインタはaを指しており、このときif条件が成立しており、内部で行われる演算はa、b、c、d、e、fの内容をマスクに追加することと等価です。したがって、trim ('abcdefg', 'a...f') を指定して間隔を削除することができ、返される内容は g のみです。

次の実際の出力は理解しやすいです:

1. トリム('abcdf', 'fd'); 出力 abc、トリムは、それがlist, all Remove

2.trim('abccdffff', 'f'); 出力 abccd,trim は、条件を満たすすべてのものが削除されます

3.trim('abcdffff', ' a…d' ); 出力内容 ffff、trim は間隔を指定できますが、本当に 'a...d' を削除したい場合は、trim は使用できません。

trim はリストの性質を削除します。マルチバイトを処理する場合に便利です。問題が発生するため、trim で中国語の文字化けが発生します。

trim('品,' , ', '),' 'product' UTF 文字の 16 進表現は 'e5 93 81'、文字列 ', ' の 16 進表現は 'e3 80 81 '。トリムでは、バイト単位で計算され、UTF8 中国語エンコードの 3 バイトが中国語の文字を表します。したがって、これは 3 文字を削除するトリムに相当します。これら 3 文字の 16 進表現は「e3 80 81」です。したがって、81 が削除されているため、最終的に返される文字列の 16 進表現は「e5 93」になります。

trim(‘,’, ‘,’) は正しい結果を返します。 '' の 16 進表現は「e7 9a 84」であるためです。

つまり、トリムは単純ではありません。トリムはリスト内のすべての文字を削除し、リスト以外の最初の文字で停止することを常に覚えておいてください。 !

以上がphpのtrim関数の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。