2

我有一个 php 网站,我可以在其中管理文章。在添加新文章表单上,有一个富文本框(允许 HTML 输入),我想限制字符输入计数。我在服务器端检查,所以使用strlen()Docs方法。

问题strlen似乎是给出了一个太大的数字。我尝试使用html_entity_decode()Docs从字符串中获取 html 标签,但生成的字符串长度似乎仍然是错误的。

4

2 回答 2

5

html_entity_decode只解码 HTML 实体,它不会忽略 HTML 标签。尝试:

strlen(strip_tags(html_entity_decode($string)));

或多字节等价物:

mb_strlen(strip_tags(html_entity_decode($string)), 'auto');
于 2012-04-10T12:48:02.697 回答
1

您想获取字符数,但不想计算 HTML 标记。

您可以通过使用 HTML 解析器来做到这一点,例如DOMDocument. 您加载文档(或片段),获取代表文档内容的主体标签,获取它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>标签内的文本等内容。

于 2012-04-10T12:53:59.887 回答