我正在开发一个使用PHP,MySQL和HTML的网站。 在数据库中,其中一个字段是可能包含HTML标记的文本,例如<b>
或<i>
。防止或清除HTML/CSS标记
我的问题是,在网站的特定部分(搜索部分),我想只显示该字段的'摘要'/子字符串。
问题是:当我得到该字段的一部分显示在页面中时,未关闭的标记会影响页面其余部分的显示方式。
两件事情会解决这个问题:
- 避免显示这些特定的标记;
- 显示字段后,我想关闭所有'打开标签'。
请注意,选项一号会好得多。
我正在开发一个使用PHP,MySQL和HTML的网站。 在数据库中,其中一个字段是可能包含HTML标记的文本,例如<b>
或<i>
。防止或清除HTML/CSS标记
我的问题是,在网站的特定部分(搜索部分),我想只显示该字段的'摘要'/子字符串。
问题是:当我得到该字段的一部分显示在页面中时,未关闭的标记会影响页面其余部分的显示方式。
两件事情会解决这个问题:
请注意,选项一号会好得多。
在向用户显示摘要之前,您可以使用strip_tags。
如果字符串xhtml兼容?如果是这样,你可以尝试滚动你自己的函数来匹配标签,并在最后为它们自动附加结束标签。
使用正则表达式查找字符串中的所有开始和结束标记,然后遍历标记。如果遇到开始标签(没有“/”),则将其推入堆栈。如果遇到关闭,则弹出堆栈顶部。
当所有的标签都被处理完后,剩下的东西需要关闭。只需一次将它们从一个弹出,然后将结尾追加到字符串的后面。
我会做这样::
函数获取串出DB将返回变量$回报
$tag = strip_tags($return); // will remove tags if exist
print '<p>'$tag'</p>;
其易于使用的预浸替换功能
$search = array(
"'<script[^>]*?>.*?</script>'si", // strip out javascript
"'<[\/\!]*?[^<>]*?>'si", // strip out html tags
"'([\r\n])[\s]+'", // strip out white space
"'&(quot|#34|#034|#x22);'i", // replace html entities
"'&(amp|#38|#038|#x26);'i", // added hexadecimal values
"'&(lt|#60|#060|#x3c);'i",
"'&(gt|#62|#062|#x3e);'i",
"'&(nbsp|#160|#xa0);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&(reg|#174);'i",
"'&(deg|#176);'i",
"'&(#39|#039|#x27);'",
"'&(euro|#8364);'i", // europe
"'&a(uml|UML);'", // german
"'&o(uml|UML);'",
"'&u(uml|UML);'",
"'&A(uml|UML);'",
"'&O(uml|UML);'",
"'&U(uml|UML);'",
"'ß'i",
);
$replace = array(
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
chr(174),
chr(176),
chr(39),
chr(128),
"ä",
"ö",
"ü",
"Ä",
"Ö",
"Ü",
"ß",
);
$text = preg_replace($search,$replace,$yourtextasstring);
echo $text;
使用这个并将$ yourtextasstring更改为您的字符串将与HTML文本或css
可以说 代码:$ yourtextasstring =“带有html标记1的文本”;
,如果你把这个预浸更换 之前,它会告诉你结果=“1”没有标签
有PHP手册巨大免责声明:** WARNING ** 因为用strip_tags()并不真正验证HTML,部分或破碎的标签可能导致删除比预期更多的文本/数据。 – stillstanding 2010-08-06 01:46:30
@stillstanding:是的,但(1)这里的html或多或少处于控制之下,(2)我们只会给出一个总结,丢失一些数据不应该是一个很大的问题,它会符合当前的需求。尽管如此,人们会在'substr'之前执行'strip_tags'。 – Wrikken 2010-08-06 01:52:34