目前,我使用strip_tags从我处理的字符串中删除所有html标签。 但是,我最近注意到它加入了包含在标签中的单词,即

$str = "<li>Hello</li><li>world</li>";
$result = strip_tags($str);
echo $result;
(prints HelloWorld)

你怎么能绕过这个?

===============>>#1 票数:2

你可以玩哪个正则表达式最好和替换:)

// ------------------------------------ 

function strip_html_tags($string) { 

    $string = str_replace("\r", ' ', $string); 
    $string = str_replace("\n", ' ', $string); 
    $string = str_replace("\t", ' ', $string); 
##  $string = str_replace("<li>', "\n* ", $string); 

##  $pattern = "/<.*?>/"; 
    $pattern = '/<[^>]*>/'; 

    $string= preg_replace ($pattern, ' ', $string); 

    $string= trim(preg_replace('/ {2,}/', ' ', $string));

return $string; 

}

// ------------------------------------ 

你也可以添加特殊的替换,例如: '<li>'"\\n* " ......或者其他:)

===============>>#2 票数:2

这完全取决于剥离HTML标记后您想要的输出。 例如:

如果你想在一个简单的项目列表中转换<li>标签,我建议你使用str_replace<li>替换为*</li>替换为\\n

strip_tags的建议是在没有任何其他转换的情况下删除HTML标记。

===============>>#3 票数:2

这将替换所有html标签(事实上,没有检查它是否真的是html),用空格替换所有html标签,然后将可能的双空格替换为单个空格并删除开始或结束空格。

$str = preg_replace("/<.*?>/", " ", $str);
$str = trim(str_replace("  ", " ", $str));

===============>>#4 票数:1

echo strip_tags( str_replace( '>', '> ', $string ));

这应该完全符合你所寻求的所有情况。

===============>>#5 票数:1

从你的代码中我发现Hello Word之间没有初始空格,你不希望strip_tags函数为你添加它,所以为了strip_tags函数准确地产生你想要的东西,我在之后添加了一个空格。第一个列表标记,结果是Hello world。

您可以复制并粘贴此代码并运行以查看差异。

    $str = "<li>Hello</li> <li>world</li>";
    $result = strip_tags($str);
    echo $result;
    //Expected result after Execution  is Hello world

===============>>#6 票数:1

你最好用htmlentities()

它不会删除<>,而是逃避它们。

  ask by Thomas translate from so

未解决问题?本站智能推荐: