strip_标签php删除的内容太多

strip_标签php删除的内容太多,php,strip-tags,Php,Strip Tags,包含html的格式不正确的字符串有点问题(请参阅开头的“”和如果stip_tags()未按预期工作,请尝试此项 $str = "To: ''blablal@johndoe.com' <'blablal@johndoe.com>\nSubject: Hello World\nDear Ladies <b>and</b> Gentlemen,"; $val = preg_replace('/<[^>]+?>/', ' ', $str); $s

包含html的格式不正确的字符串有点问题(请参阅开头的“”和如果stip_tags()未按预期工作,请尝试此项

$str = "To: ''blablal@johndoe.com' <'blablal@johndoe.com>\nSubject: Hello World\nDear Ladies <b>and</b> Gentlemen,";

$val = preg_replace('/<[^>]+?>/', ' ', $str);
$str=“To:”blablal@johndoe.com“/”、“$str);
$val
包含不带html值的字符串

由于strip_tags()实际上并不验证HTML,部分或损坏的标记可能会导致删除比预期更多的文本/数据

见:

你的案例是无效的HTML


之后的
坏字符”原因是,当剥离器发现
时,为什么您的电子邮件地址中只有一个引号?@Lithilion:我只是将此文本过滤-我对字符串的来源没有影响。我认为melvin有最好的方法。它也适用于无效的html。我认为您希望在本例中
/]+?>/
t没有区别。但是通常您希望在正则表达式的开始和结束之间吸收所有非终止字符(在本例中为
),因此我的正则表达式应该是
preg_replace('/]+?>/','$str)
?很乐意提供帮助。感谢上面提到的@NickAs,我对源代码没有任何影响,因此可能会收到无效的html内容。
To: ''blablal@johndoe.com' 
To: ''blablal@johndoe.com' 
Subject: Hello World
Dear Ladies and Gentlemen,
$str = "To: ''blablal@johndoe.com' <'blablal@johndoe.com>\nSubject: Hello World\nDear Ladies <b>and</b> Gentlemen,";

$val = preg_replace('/<[^>]+?>/', ' ', $str);
Bad character ' after <. Probable cause: Unescaped <. Try escaping it as &lt;.
preg_replace('~<\S[^<>]*>~', '', $str);