あなたは文字の数を取得したいが、あなたは、HTMLマークアップをカウントする必要はありません。
これは、DOMDocument
のようなHTMLパーサーを使用して行うことができます。あなたの文書(またはフラグメント)にロードし、文書の内容を表してbodyタグを取得し、それはnodeValue
だ取得、それの空白文字を正規化して、あなたがUTF-8互換の文字カウント機能を使用します。
$doc = new DOMDocument();
$doc->loadHTMLFile('test.html');
$body = $doc->getElementsByTagName('body')->item(0);
$text = $body->nodeValue;
$text = trim(preg_replace('/\s{1,}/u', ' ', $text));
printf("Length: %d character(s).\n", mb_strlen($text, 'utf-8'));
例入力test.html
:
<body>
<div style='float:left'><img src='../../../../includes/ph1.jpg'></div>
<label style='width: 476px; height: 40px; position: absolute;top:100px; left: 40px; z-index: 2; background-color: rgb(255, 255, 255);; background-color: transparent' >
<font size="4">1a. Nice to meet you!</font>
</label>
<img src='ENG_L1_C1_P0_1.jpg' style='width: 700px; height: 540px; position: absolute;top:140px; left: 40px; z-index: 1;' />
<script type='text/javascript'>
swfobject.registerObject('FlashID');
</script>
<input type="image" id="nextPageBtn" src="../../../../includes/ph4.gif" style="position: absolute; top: 40px; left: 795px; ">
</body>
出力例:
Length: 58 character(s).
正規化されたテキストは、次のとおり
1a. Nice to meet you! swfobject.registerObject('FlashID');
<script>
タグ内のテキストを含むテキストサイズをカウントするように注意してください。
「方法が大きすぎる」とはどういう意味ですか? utf-8のテキストではなく、いくつかのアジア文字を使用していますか? – nothrow
'mb_strlen(strip_tags($ _ POST ['txtinput']))'マルチバイト対応の関数でタグを取り除いた後の長さを確認する –