подсчет слов в строке с тегом html в php - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь посчитать слова в примере строки следующим образом:

<p>&nbsp;<p>hello world!</p><p>&nbsp;</p></p>

после прочтения документации я нашел функцию, которая должна делать именно то, что я пытаюсь сделать. но почему-то результат не совсем правильный.

это код, который я использую:

function rip_tags($string) {

    // ----- remove HTML TAGs -----
    $string = preg_replace ('/<[^>]*>/', ' ', $string);

    // ----- remove control characters -----
    $string = str_replace("\r", '', $string);    // --- replace with empty space
    $string = str_replace("\n", ' ', $string);   // --- replace with space
    $string = str_replace("\t", ' ', $string);   // --- replace with space

    // ----- remove multiple spaces -----
    $string = trim(preg_replace('/ {2,}/', ' ', $string));

    return $string; 
}
$str = '<p>&nbsp;<p>hello world!</p><p>&nbsp;</p></p>';
$str = trim(html_entity_decode($str));
$str = rip_tags($str);
$c = str_word_count($str);
echo $c;

результат должен был быть 2, но код возвращает 4 .. что мне не хватает ??

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Попробуйте свой пробег следующим образом.

Снимите html, расшифруйте объекты, затем посчитайте слова.

<?php

$html =<<<HTML
<p>&nbsp;<p>hello world!</p><p>&nbsp;</p></p>
HTML;

$stripped = strip_tags($html);
$decoded  = html_entity_decode($stripped);
echo str_word_count($decoded);

Вывод:

2
0 голосов
/ 30 марта 2020

Ваша функция по-прежнему считает вашу, которую вы видите по:

$c = str_word_count($str,1);
var_dump($c);

Если вы удалите свою функцию с помощью html_entity_decode (), вы увидите правильный подсчет. (html_entity_decode просто преобразует соответствующую сущность html в символ, который они представляют, в вашем пробеле.)

$ string = html_entity_decode ($ string);

...