PHP返回XML字符串,其中属性中添加的值缺少值
我必须解析电子邮件中的HTML和“HTML”。我已经成功地创建了一个函数来清除大多数错误,例如元素的不正确嵌套 我试图确定如何最好地解决缺少值的HTML属性问题。我们必须最终将所有内容解析为XML,因此格式良好的HTML也是必须的 清洁功能开始时非常简单:PHP返回XML字符串,其中属性中添加的值缺少值,php,xml,xml-parsing,html-parsing,Php,Xml,Xml Parsing,Html Parsing,我必须解析电子邮件中的HTML和“HTML”。我已经成功地创建了一个函数来清除大多数错误,例如元素的不正确嵌套 我试图确定如何最好地解决缺少值的HTML属性问题。我们必须最终将所有内容解析为XML,因此格式良好的HTML也是必须的 清洁功能开始时非常简单: $xml = explode('<', $xml); 我们不在乎这些属性是什么;我们的目标只是修复XML,使其格式良好,如下字符串所示: $s = 'p obnoxious="true" nonprofession
$xml = explode('<', $xml);
我们不在乎这些属性是什么;我们的目标只是修复XML,使其格式良好,如下字符串所示:
$s = 'p obnoxious="true" nonprofessional="true" style="wrong: lulz-immature" dunno="true">Some paragraph text';
我们对attribute=“attribute”
不感兴趣,因为这只是额外的工作(大多数电子邮件都是琐碎的),所以我们只想为每个缺少值的属性添加=“true”
,以防止客户端浏览器上的XML解析器因其他人的琐事而失败
正如我前面提到的,我们只需要修复缺少值的属性,我们需要返回一个字符串。至此,所有其他格式错误的XML问题都得到了解决。我不确定该从哪里开始,因为这个话题太乱了。所以
- 我们可以将整个XML字符串作为一个整体发送,以进行解析,并使用一些内置库作为字符串返回。如果此选项假定XML格式良好,并具有正确的XML声明(
) - 我们愿意手动创建一个函数来解决我们遇到的任何问题,尽管我们对构建一个验证器不感兴趣,因为我们在1997年收到了很多“HTML”
- 我们将XML作为单个字符串或数组(由您选择)使用;我们显然不是在处理文件
$doc = new DOMDocument('1.0');
$doc->loadHTML('<p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text');
echo $doc->saveXML();
$doc=新的DOMDocument('1.0');
$doc->loadHTML(“某些段落文本”);
echo$doc->saveXML();
上述代码将产生以下输出:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p obnoxious="" nonprofessional="" style="wrong: lulz-immature" dunno="">Some paragraph text</p></body></html>
一些段落文本
如果需要,您可以将每个
=”
替换为=“true”
,但输出已经是有效的XML。如果您不关心属性及其值,为什么不干脆把它们全部删除?@JackFleeting因为这很可能是一个集而忘之的实现,在未来几年或几十年内,它将被用于无数的电子邮件中,我宁愿犯一个谨慎的错误。不过,我至少在精神上同意你的看法。您的示例很有效,我现在正在对整个XML输出进行测试…我必须花足够的时间确保它不是死路一条,并且。。。不是!接受和+1为我节省了至少一周的疯狂;非常感谢。不客气:)
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p obnoxious="" nonprofessional="" style="wrong: lulz-immature" dunno="">Some paragraph text</p></body></html>