我有一个php网站,我可以管理文章。在添加新文章表单上,有一个富文本框(允许HTML输入),我想限制字符输入计数。我在服务器端检查所以使用strlen()
Docs方法。
问题是strlen
似乎给出了一个太大的数字。我试图使用html_entity_decode()
Docs从字符串中获取html标签但仍然是字符串长度似乎是错误的。
答案 0 :(得分:5)
html_entity_decode
仅解码HTML实体,不会忽略HTML标记。尝试:
strlen(strip_tags(html_entity_decode($string)));
或多字节等价物:
mb_strlen(strip_tags(html_entity_decode($string)), 'auto');
答案 1 :(得分:1)
您想获取字符数,但不想计算HTML标记。
您可以使用HTML解析器来完成此操作,例如DOMDocument
。您加载文档(或片段),获取表示文档内容的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>
标记内的文字等内容。