目前,我使用strip_tags从我处理的字符串中删除所有html标记。但是,我最近注意到它加入了包含在标签中的单词 即
$str = "<li>Hello</li><li>world</li>";
$result = strip_tags($str);
echo $result;
(prints HelloWorld)
你怎么能绕过这个?
答案 0 :(得分:3)
找到以下问题,这基本上解决了我的问题 Problem using strip_tags in php
感谢您的帮助
答案 1 :(得分:2)
这完全取决于剥离HTML标记后您想要的输出。例如:
如果您希望在明确的项目列表中转换<li>
代码,建议您使用str_replace
将<li>
替换为*
和{{ 1}}与</li>
。
\n
的建议是在没有任何其他转换的情况下删除HTML标记。
答案 2 :(得分:2)
这将替换所有html标签(实际上是&lt; ABC&gt;形式的任何东西,不检查它是否真的是html),带有空格,然后将可能的双空格替换为单个空格并删除开始或结束的空格
$str = preg_replace("/<.*?>/", " ", $str);
$str = trim(str_replace(" ", " ", $str));
答案 3 :(得分:2)
你可以玩哪个Regex模式最好,替换什么:)
// ------------------------------------
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* "
...或者其他:)
答案 4 :(得分:1)
它不会删除&lt;&gt;,而是将它们转义。
答案 5 :(得分:1)
echo strip_tags( str_replace( '>', '> ', $string ));
在所有情况下都应该完全符合您的要求。
答案 6 :(得分: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