文字参照も含む文字列の長さを取得するにはどうすればよいですか? ブラウザに表示される文字数だけをカウントしたい。お気に入り
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
前もって感謝します
文字参照も含む文字列の長さを取得するにはどうすればよいですか? ブラウザに表示される文字数だけをカウントしたい。お気に入り
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
前もって感謝します
私は一緒に行きます:
$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');
実際の UTF-8 でエンコードされた文字列を操作するのではなく、文字列内に HTML エンティティがある理由を最初に疑問に思います。
また、HTML エンティティが正しく記述されていないことに注意してください (セミコロンで終了する必要があります)。セミコロンを追加しないと、エンティティ関連の機能が失敗し、多くのブラウザーがエンティティを正しくレンダリングできなくなります。
文字列には Unicode 文字のリテラル エンコーディングが含まれているため (たとえば、UTF-8 でエンコードされているのではなく)、単にそれらをダミー文字に置き換えるだけで長さを取得できます。
$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));
UTF-8 など、PHP が理解できるものでエンコードされている場合は、代わりに使用できますmb_strlen()
。
strlen
は、文字数ではなくバイト数のみを返すため、マルチバイト文字列では失敗するシングルバイト文字列関数です (シングルバイト文字列ではすべてのバイトが 1 文字を表すため)。
マルチバイト文字列strlen
の場合は、代わりに の対応するマルチバイト文字列を使用mb_strlen
し、適切な文字エンコーディングを指定することを忘れないでください。
また、HTML 文字参照を単一の文字として解釈するには、 を使用html_entity_decode
して、それらが表す文字に置き換えます。
$str = html_entity_decode('Stackù', ENT_QUOTES, 'UTF-8');
var_dump(mb_strlen($str, 'UTF-8')); // int(6)
�f9
は有効な文字参照ではないx
ことX
に注意して&#
ください;
。
mb_strlenを見てください
mb_strlen('string' , 'UTF-8');