如何使用DOMDocument loadHtml加载确切的输入值

时间:2016-10-25 18:28:22

标签: php domdocument

我正在使用DOMDocument将文本作为HTML加载和处理。

我注意到,只要使用loadHtml(value)方法加载输入字符串,它就会添加多个标记,如<html><body>等。

有几个问题: (1)如果使用loadHTML(value)加载文本,则会自动添加结束标记。有什么办法可以避免吗? 如何防止DOMDocument添加结束标记?

e.g。

$value = "Hi there ! <my-custom-tag>";
$doc = new DOMDocument('1.0', 'UTF-8');
// Load HTML
$doc->loadHTML($value);
error_log(" value after loading in html dom - ". $doc->saveHTML());

输出:最后一条语句error_log打印如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hi there ! <my-custom-tag></my-custom-tag></p></body></html>

(2)当我使用loadHTML方法加载带有括号的URL(如<http://stackoverflow.com>)的文本时,它只是在//后删除字符串。 如何让DOMDocument使用Url保留此类自定义标记?

e.g。

$value = "Hi there ! <http://something.com>";
$doc = new DOMDocument('1.0', 'UTF-8');
// Load HTML
$doc->loadHTML($value);
error_log(" value after loading in html dom - ". $doc->saveHTML());

输出:最后一条语句error_log打印如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hi there ! <http:></http:></p></body></html>

1 个答案:

答案 0 :(得分:0)

你真的需要使用DOM吗?

如果您提供html并且需要使用DOM,则可以通过执行以下操作来获取标记:

    $doc->getElementsByTagName('my-custom-tag');    

但如果它是一个字符串,那么使用像

这样的正则表达式运算符会更有意义
    $str = 'Hello <my-tag>info</my-tag>';

    preg_match("'<my-tag>(.*?)</my-tag>'si", $str, $match);

    echo $match[1];