【问题标题】:not cleared text with strip_tags and str_replace after implode内爆后未使用 strip_tags 和 str_replace 清除文本
【发布时间】:2018-11-09 13:00:00
【问题描述】:

此代码必须是一个文本字符串,其中包含分隔“;”的文本。

$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 没有删除这部分文本 ' , ' ?

【问题讨论】:

  • strip_tags“您可以使用可选的第二个参数来指定不应剥离的标签。”

标签: php str-replace strip-tags


【解决方案1】:

删除所有标签后,您只需用分号和空格替换逗号(由一个或多个空格字符开头和结尾)。我将添加 trim() 以清除已完成字符串开头或结尾处的任何挥之不去的空白字符。

代码:(Demo)

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

输出:

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

也许更稳定的替代方法是解析 html 并从 &lt;a&gt; 标签中提取 nodeValues。

代码:(Demo)

$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

【讨论】:

  • 谢谢。带有 DOMDocument 的变体是最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 2011-02-11
  • 2010-11-07
相关资源
最近更新 更多