PHP return XML 将值添加到属性缺失值的字符串
PHP return XML string with values added to attributes missing values
我必须从电子邮件中解析 HTML 和“HTML”。我已经设法创建了一个函数来清除大部分错误,例如元素嵌套不当。
我正在尝试确定如何最好地解决 HTML 属性缺失值的问题。我们必须最终将所有内容解析为XML,因此格式良好的HTML也是必须的。
清洁功能启动起来很简单:
$xml = explode('<', $xml);
我们快速确定元素的开始和结束标签。
然而一旦我们得到属性,事情很快就会变得非常混乱:
- 缺失值。
- 人们使用单引号而不是双引号。
- 属性值可以包含单引号。
这是我们必须解析的 HTML 字符串的示例(p
元素):
$s = 'p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text';
我们不关心那些属性是什么;我们的目标只是修复 XML,使其格式正确,如以下字符串所示:
$s = 'p obnoxious="true" nonprofessional="true" style="wrong: lulz-immature" dunno="true">Some paragraph text';
我们对 attribute="attribute"
不感兴趣,因为那只是额外的工作(大多数电子邮件都是无聊的)所以我们只是想为每个缺少值的属性附加 ="true"
[=40] =]只是 以防止客户端浏览器上的 XML 解析器对其他地方没有完成工作的人的琐碎问题进行故障处理。
正如我之前提到的,我们只需要修复缺少值的属性,我们需要 return 一个字符串。此时 格式错误 XML 的所有其他问题都已解决 。我不确定我应该从哪里开始,因为这个话题太乱了。所以...
- 我们愿意将整个 XML 字符串作为一个整体进行解析,然后 return 作为一个字符串返回 ,其中包含一些内置的内容图书馆。如果此选项假定 XML 格式正确且具有适当的 XML 声明 (
<?xml version="1.0" encoding="UTF-8"?>
)。
- 我们愿意手动创建一个函数来解决我们遇到的任何问题,尽管我们对构建验证器并不感兴趣,因为我们在 1997 年收到了尖叫声“HTML”。
- 我们正在使用 XML 作为单个字符串或数组(您的选择);我们明确地不处理文件。
我们如何通过合理的努力确保 XML 字符串(部分或全部)被 return 编辑为字符串 并具有所有值属性?
DOM extension可能会解决您的问题:
$doc = new DOMDocument('1.0');
$doc->loadHTML('<p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text');
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。
我必须从电子邮件中解析 HTML 和“HTML”。我已经设法创建了一个函数来清除大部分错误,例如元素嵌套不当。
我正在尝试确定如何最好地解决 HTML 属性缺失值的问题。我们必须最终将所有内容解析为XML,因此格式良好的HTML也是必须的。
清洁功能启动起来很简单:
$xml = explode('<', $xml);
我们快速确定元素的开始和结束标签。
然而一旦我们得到属性,事情很快就会变得非常混乱:
- 缺失值。
- 人们使用单引号而不是双引号。
- 属性值可以包含单引号。
这是我们必须解析的 HTML 字符串的示例(p
元素):
$s = 'p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text';
我们不关心那些属性是什么;我们的目标只是修复 XML,使其格式正确,如以下字符串所示:
$s = 'p obnoxious="true" nonprofessional="true" style="wrong: lulz-immature" dunno="true">Some paragraph text';
我们对 attribute="attribute"
不感兴趣,因为那只是额外的工作(大多数电子邮件都是无聊的)所以我们只是想为每个缺少值的属性附加 ="true"
[=40] =]只是 以防止客户端浏览器上的 XML 解析器对其他地方没有完成工作的人的琐碎问题进行故障处理。
正如我之前提到的,我们只需要修复缺少值的属性,我们需要 return 一个字符串。此时 格式错误 XML 的所有其他问题都已解决 。我不确定我应该从哪里开始,因为这个话题太乱了。所以...
- 我们愿意将整个 XML 字符串作为一个整体进行解析,然后 return 作为一个字符串返回 ,其中包含一些内置的内容图书馆。如果此选项假定 XML 格式正确且具有适当的 XML 声明 (
<?xml version="1.0" encoding="UTF-8"?>
)。 - 我们愿意手动创建一个函数来解决我们遇到的任何问题,尽管我们对构建验证器并不感兴趣,因为我们在 1997 年收到了尖叫声“HTML”。
- 我们正在使用 XML 作为单个字符串或数组(您的选择);我们明确地不处理文件。
我们如何通过合理的努力确保 XML 字符串(部分或全部)被 return 编辑为字符串 并具有所有值属性?
DOM extension可能会解决您的问题:
$doc = new DOMDocument('1.0');
$doc->loadHTML('<p obnoxious nonprofessional style=\'wrong: lulz-immature\' dunno>Some paragraph text');
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。