Php 防止或清除HTML/CSS标记
我正在开发一个使用PHP、MySQL和HTML的网站。 在数据库中,其中一个字段是可能包含HTML标记的文本,例如Php 防止或清除HTML/CSS标记,php,html,css,Php,Html,Css,我正在开发一个使用PHP、MySQL和HTML的网站。 在数据库中,其中一个字段是可能包含HTML标记的文本,例如或 我的问题是,在网站的特定部分(搜索部分),我只想显示此字段的“摘要”或子字符串 问题是:当我在页面中显示此字段的一部分时,未关闭的标记会影响页面其余部分的显示方式 有两件事可以解决这个问题: 防止显示这些特定标签 显示字段后,我要关闭所有“打开的标记” 请注意,选项1会更好。您可以在向用户显示摘要之前使用。如果字符串与xhtml兼容?如果是,您可以尝试滚动您自己的函数以匹配标记,
或
我的问题是,在网站的特定部分(搜索部分),我只想显示此字段的“摘要”或子字符串
问题是:当我在页面中显示此字段的一部分时,未关闭的标记会影响页面其余部分的显示方式
有两件事可以解决这个问题:
请注意,选项1会更好。您可以在向用户显示摘要之前使用。如果字符串与xhtml兼容?如果是,您可以尝试滚动您自己的函数以匹配标记,并在末尾为它们自动附加结束标记 使用正则表达式查找字符串中的所有开始标记和结束标记,然后循环遍历这些标记。如果它遇到一个开始标记(不带“/”),则将其推入堆栈。如果遇到关闭,则弹出堆栈顶部
处理完所有标记后,需要关闭堆栈中剩余的标记。只需一次弹出一个,然后将结束符附加到字符串的后面。我会这样做: 从DB中获取字符串的函数将返回var$return
$tag = strip_tags($return); // will remove tags if exist
print '<p>'$tag'</p>;
$tag=strip_tags($return);//如果存在,将删除标记
打印“”$tag“;
其preg-replace功能易于使用
$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;
$search=array(
“']*?>*?*?*?”,//去掉javascript
“'si',//去掉html标记
“([\r\n])[\s]+”,//去掉空白
“&(quot|#34|#034|#x22);'i”,//替换html实体
“&(amp|#38|#038|#x26);'i”,//添加了十六进制值
“&(lt|60|060|x3c);“我”,
“&(gt|62|062|x3e);“我”,
“&(nbsp|160|xa0);“我”,
“&(iexcl|161);“i”,
“&(cent|162);“i”,
“&(英镑|#163);“我”,
“&(复印件169);“我”,
“&(reg|174);“i”,
“&(deg|176);“i”,
“&(39 | 039 | x27);”,
“&(欧元|#8364);‘i’,//欧洲
“&a(uml | uml);”,//德语
“&o(uml | uml);”,
“&u(uml | uml);”,
“&A(uml | uml);”,
“&O(uml | uml);”,
“&U(uml | uml);”,
“ß;'i”,
);
$replace=数组(
"",
"",
"\\1",
"\"",
"&",
"",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
chr(174),
chr(176),
chr(39),
chr(128),
"ä",
"ö",
"ü",
"Ä",
"Ö",
"Ü",
"ß",
);
$text=preg_replace($search,$replace,$yourtextasstring);
echo$文本;
使用此选项并将$yourtextasstring更改为具有html文本或css的字符串
比方说
代码:$yourtextasstring=“带有html标记的文本1”
如果你把这个放在preg替换之前
它将显示不带标记的result=“1”PHP手册中有一个巨大的免责声明:警告,因为strip_tags()实际上并不验证HTML,部分或损坏的标记可能会导致删除比预期更多的文本/数据。@stillstanding:是的,但正如(1)这里的HTML或多或少处于控制之下,以及(2)我们只想给出一个总结,丢失一些数据应该不是什么大问题,它符合当前的需要。不过,我们可以在
substr
之前做strip\u标记。