PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのstrlen()関数がUnicode文字に対して誤った文字数を返す原因とmb_strlen()による解決方法

Unicode文字(マルチバイト文字)を含む文字列の正しい長さを取得したい場合は、strlen()の代わりにmb_strlen()を使用しましょう。

なぜstrlen()では誤った値が返されるのか

PHPのstrlen()関数は、文字数ではなく「バイト数」をカウントする関数です。UTF-8などのマルチバイトエンコーディングでは、1文字が複数バイトで表現されるため、特殊文字やアクセント記号付きの文字が含まれると、実際の文字数よりも大きな値が返されてしまいます。

一方、mb_strlen()は文字エンコーディングを指定できるため、マルチバイト文字を1文字として正確にカウントできます。

サンプルコード

以下は、mb_strlen()strlen()の違いを確認できるPHPコードです。

<?php
   $unicodeValues = 'JohnSmȉth';
   echo "mb_strlenでの文字数=", mb_strlen($unicodeValues, 'utf8');
   echo "\n";
   echo "strlenでの文字数=", strlen($unicodeValues);
?>

出力結果

mb_strlenでの文字数=9
strlenでの文字数=10

結果の解説

この例では、文字列「JohnSmȉth」に含まれる「ȉ」(ブレーブ符号付きのi)がUTF-8では2バイトで表現されます。そのため、バイト数を数えるstrlen()は10を返し、文字数を正しく数えるmb_strlen()は9を返します。

日本語などのマルチバイト文字を扱う場合も同様の問題が発生するため、文字数を扱う処理では必ずmb_strlen()を使うことをおすすめします。

  1. PHPのstrlen()関数とは?文字列の長さを取得する方法を解説

    strlen()関数とはPHPのstrlen()関数は、文字列の長さを取得するために使用されます。正常に処理が完了した場合は文字列の長さを返し、空の文字列が渡された場合は0を返します。構文strlen(str)パラメータstr − 長さを取得したい対象の文字列を指定します。戻り値strlen()関数は、成功時に文字列の長さを返します。文字列が空の場合は0が返されます。使用例以下に、strlen()関数を使用した具体例を示します。<?php    echo strlen("Tom Hanks!");?>出力結果上記のコードを

  2. PHPのstripslashes()関数とは?使い方とサンプルコードを解説

    PHPのstripslashes()関数は、エスケープ処理によって付与されたバックスラッシュ(\)を文字列から取り除くための関数です。データベースに保存する前後の文字列処理や、不要なエスケープ記号を削除したい場合などによく使われます。構文stripslashes(str)パラメータstr − バックスラッシュを取り除きたい対象の文字列を指定します。戻り値stripslashes()関数は、バックスラッシュが取り除かれた文字列を返します。具体的には、\ は に変換され、二重のバックスラッシュ(\\)は単一のバックスラッシュ(\)に変換されます。使用例以下はstripslashes()関数を使用