Вопрос по html, php – Ограничить длину ввода текста, содержащего теги HTML

2

У меня есть php веб-сайты, на которых я могу управлять статьями. В форме «Добавить новую статью» имеется поле расширенного текста (позволяет вводить HTML), которое я хотел бы ограничить количеством вводимых символов. Я проверяю на стороне сервера, поэтому с помощьюstrlen()­Docs метод.

Проблема вstrlen кажется, дает слишком большое число. Я пытался использоватьhtml_entity_decode()­Docs чтобы получить html-теги из строки, но все же полученная длина строки кажется неправильной.

что "слишком велико" имею в виду? в тексте utf-8 не используются азиатские символы? nothrow
Как насчетmb_strlen(strip_tags($_POST['txtinput']))  Проверьте длину после удаления тегов с помощью многобайтовой совместимой функции. Michael Berkowski

Ваш Ответ

2   ответа
5

html_entity_decode декодирует только объекты HTML, он не игнорирует теги HTML. Пытаться:

Или многобайтовый эквивалент:

mb_strlen(strip_tags(html_entity_decode($string)), 'auto');
Error: User Rate Limit Exceededutf8_decodeError: User Rate Limit Exceededutf8_decodeError: User Rate Limit Exceeded
Error: User Rate Limit Exceededmb_strlen()Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded$stringError: User Rate Limit Exceededutf8_decodeError: User Rate Limit Exceeded
Error: User Rate Limit Exceededutf8_decodeError: User Rate Limit Exceededstrlen($str) > mb_strlen($str).
Error: User Rate Limit Exceeded
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> теги.

Error: User Rate Limit Exceeded Bruno Le Duic
Error: User Rate Limit Exceededthis answer to substring in html.

Похожие вопросы