не очищенный текст с помощью strip_tags и str_replace после взрыва

Этот код должен быть текстовой строкой, в которой есть текст, из которого отделяется ‘;’.

$text='<p class="users_attr" style=""></p>
<h3 class="show_user_h3" style=""><a href="/ru/tutors/violin/" class="link_users_attr">Игра на скрипке, виолончели</a></h3>
,
<h3 class="show_user_h3" style=""><a href="/ru/tutors/hrafika-1/" class="link_users_attr">Искусствоведение</a></h3>
,
<h3 class="show_user_h3" style=""><a href="/ru/tutors/uroki-vokala/" class="link_users_attr">Уроки вокала</a></h3>
,
<h3 class="show_user_h3" style=""><a href="/ru/tutors/hra-na-fortepano/" class="link_users_attr">Игра на фортепиано</a></h3>
,
<h3 class="show_user_h3" style=""><a href="/ru/tutors/sopilka/" class="link_users_attr">Игра на флейте</a></h3>
,
<h3 class="show_user_h3" style=""><a href="/ru/tutors/muzika/" class="link_users_attr">Музыка</a></h3>
,
<h3 class="show_user_h3" style=""><a href="/ru/tutors/psykholohiia/" class="link_users_attr">Психология</a></h3>
<p style=""></p>';

Я делаю это с помощью этих функций:

$data['cats'] = explode('</h3>', $text);
$data['cats'] = implode("; ", $data['cats']);
$data['cats'] = strip_tags($data['cats'], '<h3><a><p>');
$data['cats'] = str_replace(" , ", "", $data['cats']);

После функции $ text это так:

<p class="users_attr"></p>
<h3 class="show_user_h3">
<a href="/ru/tutors/violin/" class="link_users_attr">Игра на скрипке, виолончели</a>; ,
<h3 class="show_user_h3">
<a href="/ru/tutors/hrafika-1/" class="link_users_attr">Искусствоведение</a>; ,
<h3 class="show_user_h3">
<a href="/ru/tutors/uroki-vokala/" class="link_users_attr">Уроки вокала</a>; ,
<h3 class="show_user_h3">
<a href="/ru/tutors/hra-na-fortepano/" class="link_users_attr">Игра на фортепиано</a>; ,
<h3 class="show_user_h3">
<a href="/ru/tutors/sopilka/" class="link_users_attr">Игра на флейте</a>; ,
<h3 class="show_user_h3">
<a href="/ru/tutors/muzika/" class="link_users_attr">Музыка</a>; ,
<h3 class="show_user_h3">
<a href="/ru/tutors/psykholohiia/" class="link_users_attr">Психология</a>;

Почему strip_tags не удаляет HTML-теги и почему str_replace не удаляет эти части текста ‘,’?

0

Решение

После того, как вы удалили все теги, вам нужно будет только заменить запятые (которые идут и заканчиваются одним или несколькими пробельными символами) точкой с запятой, а затем пробелом. Я добавлю trim() убирать любые оставшиеся пробельные символы в начале или конце законченной строки.

Код: (демонстрация)

echo trim(preg_replace('~\s+,\s+~', '; ', strip_tags($text)));

Выход:

Игра на скрипке, виолончели; Искусствоведение; Уроки вокала; Игра на фортепиано; Игра на флейте; Музыка; Психология

Возможно, более стабильной альтернативой было бы проанализировать html и извлечь значения узлов из <a> теги.

Код: (демонстрация)

$dom=new DOMDocument;
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $text);  // https://stackoverflow.com/a/8218649/2943403
$xpath = new DOMXPath($dom);

$data['cats'] = [];
foreach ($xpath->query("//a") as $node) {
$data['cats'][] = $node->nodeValue;
}
echo implode('; ', $data['cats']);
// same result
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector