ホームページ > バックエンド開発 > PHPの問題 > PHP+Trim文字化け問題の解決方法

PHP+Trim文字化け問題の解決方法

藏色散人
リリース: 2023-03-14 13:04:01
オリジナル
2074 人が閲覧しました

PHP の文字化けトリムは、PHP の文字列関数がデフォルトでマルチバイトセーフではないために発生します。解決策は、mb_trim 関数をカプセル化して文字化けを解決することです。

PHP+Trim文字化け問題の解決方法

#この記事の動作環境: Windows 7 システム、PHP バージョン 7.4、Dell G3 コンピューター。

PHP トリム文字化けの問題を解決するにはどうすればよいですか?

PHP の Trim は文字化けをインターセプトします

常に Trim を使用して文字列の両端をフィルタリングします。Trim の公式説明:

trim —文字列の先頭と末尾にある空白文字 (またはその他の文字) を削除します。

今日、非常に奇妙な問題を見つけました。コードは次のとおりです。

<?php
$str = &#39;研发、产品、&#39;;
echo trim($str, &#39;、&#39;);
ログイン後にコピー

これが何を返すかわかりますか? 「開発製品」?いや、これは奇しくも「研究開発と生産」に戻りました。

開き方が間違っているのでしょうか?文字化けが返されるのはなぜでしょうか?

いくつかのテストの後、非常に興味深い問題を発見しました。

<?php
echo trim(&#39;abacabb&#39;, &#39;ab&#39;);   //print &#39;c&#39;
ログイン後にコピー

当初は acabb が返されると思っていましたが、c しか返されませんでした。これはトリム機能の誤解です。

実は、この例は公式ドキュメントに記載されていますが、私は注意を払いませんでした。

trim は文字列の最初の文字をループします。上記の例と同様に、実行プロセスは次のようになります。

文字列 abacabb は添字 0 からループを開始します。 ab 内の文字が存在する場合は削除され、存在しない場合はループが停止します。文字。

したがって、実行は次のようになります:

  • ループ a が文字列 ab に存在するので、それを削除し、bacabb を残します

  • ループ b文字列 ab に存在する場合は、 acabb

  • ループを残して削除します。 文字列 ab に存在する場合は、cabb

  • ループ c を残して削除します。これは文字列 ab に存在し、ループを停止するため、最初の文字を削除した後に残るのは cabb です。

ただし、trim は最初と最後の文字をフィルタリングするため、ループ内の末尾からも削除されます。

  • ループ b は文字列 ab に存在します。削除してください。残りの cab は次のとおりです。

  • ループ b は文字列 ab に存在します。削除してください。 、残りの ca、

  • ループ a は文字列 ab に存在し、それを削除して c を残します、

  • ループ c は文字列に存在しませんab、ループを停止するため、終端文字を削除すると次のようになります。

つまり、すべてが終わった後、abacabb には c が残ります。ここでトリム機能についてある程度理解できたと思います。

さて、文字化けしたコードの問題について話しましょう。なぜ文字化けしたコードが返されるのでしょうか?

これは、PHP では文字列関数がデフォルトではマルチバイトセーフではないためです。マルチバイトセーフが必要な場合は、mb_ シリーズの関数を使用する必要があります。

「,」の 16 進コードは 0xe3 0x80 0x81 です。マルチバイト セーフではない関数では 3 文字として扱われます。

「品」の 16 進コードは 0xe5 0x93 0x81 です。ここの最後の 0x81 は一致するだけでフィルタリングされます。文字化けの原因となります。

わかりました。問題が見つかりました。trim には mb 関数がありませんが、自分でカプセル化できます。 関数mb_trim

追記: 私は長い間トリムを使ってきましたが、まったく理解していませんでした。公式ドキュメントを読むことは依然として重要です。

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP+Trim文字化け問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート