内爆后未清除带有 strip_tags 和 str_replace 的文本
not cleared text with strip_tags and str_replace after implode
此代码必须是文本字符串,其中的文本以“;”分隔。
$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 没有删除文本 ' , ' 的这一部分?
去除所有标签后,您只需将逗号(由一个或多个白色 space 字符开头和结尾)替换为分号,然后是space。我将添加 trim()
以清除已完成字符串开头或结尾的任何挥之不去的白色 space 字符。
代码:(Demo)
echo trim(preg_replace('~\s+,\s+~', '; ', strip_tags($text)));
输出:
Игра на скрипке, виолончели; Искусствоведение; Уроки вокала; Игра на фортепиано; Игра на флейте; Музыка; Психология
也许更稳定的替代方法是解析 html 并从 <a>
标签中提取节点值。
代码:(Demo)
$dom=new DOMDocument;
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $text); //
$xpath = new DOMXPath($dom);
$data['cats'] = [];
foreach ($xpath->query("//a") as $node) {
$data['cats'][] = $node->nodeValue;
}
echo implode('; ', $data['cats']);
// same result
此代码必须是文本字符串,其中的文本以“;”分隔。
$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 没有删除文本 ' , ' 的这一部分?
去除所有标签后,您只需将逗号(由一个或多个白色 space 字符开头和结尾)替换为分号,然后是space。我将添加 trim()
以清除已完成字符串开头或结尾的任何挥之不去的白色 space 字符。
代码:(Demo)
echo trim(preg_replace('~\s+,\s+~', '; ', strip_tags($text)));
输出:
Игра на скрипке, виолончели; Искусствоведение; Уроки вокала; Игра на фортепиано; Игра на флейте; Музыка; Психология
也许更稳定的替代方法是解析 html 并从 <a>
标签中提取节点值。
代码:(Demo)
$dom=new DOMDocument;
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $text); //
$xpath = new DOMXPath($dom);
$data['cats'] = [];
foreach ($xpath->query("//a") as $node) {
$data['cats'][] = $node->nodeValue;
}
echo implode('; ', $data['cats']);
// same result