包含html格式错误的字符串(请参见开头的''和<'blabla)以及PHP中的函数strip_tags()有点麻烦。
我有此代码:
$str = "To: ''blablal@johndoe.com' <'blablal@johndoe.com>\nSubject: Hello World\nDear Ladies <b>and</b> Gentlemen,";
echo strip_tags($str);
具有以下优势:
To: ''blablal@johndoe.com'
我想要/期望的结果是:
To: ''blablal@johndoe.com'
Subject: Hello World
Dear Ladies and Gentlemen,
你有什么想法要得到这个吗?
答案 0 :(得分:1)
如果stip_tags()不能按预期工作,请尝试执行此操作。
$str = "To: ''blablal@johndoe.com' <'blablal@johndoe.com>\nSubject: Hello World\nDear Ladies <b>and</b> Gentlemen,";
$val = preg_replace('/<[^>]+?>/', ' ', $str);
您的$val
包含没有html值的字符串
答案 1 :(得分:0)
由于strip_tags()实际上并未验证HTML,因此部分或损坏的标记可能导致删除的文本/数据超出预期。
请参见PHP manual:
您的情况是无效的HTML。 HTML validator说
Bad character ' after <. Probable cause: Unescaped <. Try escaping it as <.
答案 2 :(得分:0)
原因是,当剥离器找到在非空白字符后的<
时,会假定剥离器位于标记内。然后,如果在标签内看到引号,则设置一个标志(in_q
),然后寻找一个闭合对。如果找到闭合对,则取消设置in_q
标志(in_q = 0;
),但是如果找不到,则假定它仍在引号内,并消耗掉所有内容并将其从输出中删除
如果输入字符串中包含此类格式错误的标记,则最好改用正则表达式:
preg_replace('~<\S[^<>]*>~', '', $str);