0

文字参照も含む文字列の長さを取得するにはどうすればよいですか? ブラウザに表示される文字数だけをカウントしたい。お気に入り

$raw = "Stack&#00f9"    =  Length = 6  
$raw = "Stack12345"  = Length = 10  
$raw = "Stack&#00f9&#00f9" = Length = 7  

前もって感謝します

4

5 に答える 5

3

私は一緒に行きます:

$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');

実際の UTF-8 でエンコードされた文字列を操作するのではなく、文字列内に HTML エンティティがある理由を最初に疑問に思います。

また、HTML エンティティが正しく記述されていないことに注意してください (セミコロンで終了する必要があります)。セミコロンを追加しないと、エンティティ関連の機能が失敗し、多くのブラウザーがエンティティを正しくレンダリングできなくなります。

于 2010-10-14T12:44:19.303 に答える
2

文字列には Unicode 文字のリテラル エンコーディングが含まれているため (たとえば、UTF-8 でエンコードされているのではなく)、単にそれらをダミー文字に置き換えるだけで長さを取得できます。

$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));

UTF-8 など、PHP が理解できるものエンコードされている場合は、代わりに使用できますmb_strlen()

于 2010-10-14T12:39:45.247 に答える
1

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)

&#00f9は有効な文字参照ではないxことXに注意して&#ください;

于 2010-10-14T12:39:58.547 に答える
-1

mb_strlenを見てください

于 2010-10-14T12:34:30.390 に答える
-1
mb_strlen('string' , 'UTF-8');
于 2010-10-14T12:36:13.770 に答える