PHP的:删除所有的标签,但“A HREF”文本
这里是我的问题:PHP的:删除所有的标签,但“A HREF”文本
我有一个文本,用户可以输入任何他想要的。
当他把这个文本(POST方法),在服务器端,我不过滤它在所有写入到数据库之前(因为我想保持“完整”,用户输入的内容(也许它可以用作他试图破解的证据或任何))。
然后输出它之前,我用这个函数:
public function textForWeb($texte,$br=true)
{
if ($br) {
return
mb_ereg_replace("((\r)?\n)", "<br />",
htmlentities(
stripslashes($texte),
ENT_QUOTES, 'UTF-8'
)
);
}
else {
return
htmlentities(
stripslashes($texte),
ENT_QUOTES, 'UTF-8'
);
}
}
所以文本正确过滤,并保持UTF-8
编码。
但问题是,我想所有这些文字:<a href="http://url">xxx</a>
被不变。即当我将显示它时,链接(只链接“http://
”和没有JavaScript里面的)将是“可点击”。
例如,您可以看到它现在如何显示here。看到通告的最后一行?我希望链接到网站是“可点击”的。
你会怎么做?
只需添加一个的preg_replace()函数您ヶ辆()函数
$output = textForWeb($output);
$output = preg_replace('#<a href="(?=https:\/\/|http:\/\/)(.*?)">(.*?)</a>#i', '<a href="$1">$2</a>', $output);
echo $output;
这样,你仍然可以逃避在一个安全的方式,所有其它的HTML(而不是使用用strip_tags后恢复逃脱一个标签()函数)
此的preg_replace()函数搜索一个标签链接到以http网页://或https://,然后用<,>和替换转义特殊字符”,使得链接再次点击。
明天我会试试,看看它是否有效,非常感谢=) – 2012-01-18 20:36:28
@OivivPons - 工作? :) – Tom 2012-01-19 13:39:10
我正在处理它。其实我想我会转换为HTML实体,然后我会改变自己的网址我认为“有效”,即例如,如果我看到“'http:// wwW.m.com /'”我将添加'一个href'标签,以便它可以“点击” – 2012-01-19 16:53:43
当输出肯定你会更好只是使用strip_tags和设置“a”是一个允许的元素?
I.e.
$string = strip_tags($string,'<a>');
这将删除标签,而不是将它们转换为它们的实体。这取决于您是否需要将所有内容从<a>
转换为实体,或者您是否只想删除代码。
strip_tags()isn对于转义HTML等是不够的,你应该尽可能使用htmlentities($ string,ENT_QUOTES,$ text_encoding),或者使用htmlPurifier或类似的东西 – Tom 2012-01-18 11:36:39
为什么不使用strip_tags()?这并不解决JavaScript喜欢,但仍然是一个单一的功能。在strip标签tou之后,可以删除所有href属性。用正则表达式可能。 – Kristian 2012-01-18 11:05:25
是的,但是如果只删除'href =“(?! http)'那么它就不是那么糟糕了,它可能会破坏语法,但是对于那个链接来说,olny可能并不会超出这个正则表达式。 – Kristian 2012-01-18 11:11:25
我需要它将''标签中的所有内容转换为实体,并正确地过滤掉''标签,以便我可以确定它只是一个有效的URL(=否'JavaScript') – 2012-01-18 11:17:53