【发布时间】:2016-06-17 08:22:56
【问题描述】:
我正在尝试从 HTML 中获取 <svg> 内容并将其放入数组中以供以后使用。我的代码...
$html_content = '
<div class="stage" id="shape_1"><svg height="100" version="1.1" width="350" xmlns="http://www.w3.org/2000/svg" style="overflow: hidden; position: relative; left: -0.316681px; top: -0.650024px;"><desc>Created with Raphaël 2.1.2</desc><defs/><rect x="75" y="25" width="200" height="50" r="0" rx="0" ry="0" fill="#90ee90" stroke="#000" style="fill-opacity: 0.5;" fill-opacity="0.5" stroke-width="0"/><path style="stroke-opacity: 0.8;" fill="none" stroke="#666666" d="M75,25L275,25" stroke-width="2" stroke-opacity="0.8"/><path style="stroke-opacity: 0.8;" fill="none" stroke="#666666" d="M275,25L275,75" stroke-width="2" stroke-opacity="0.8"/><path style="stroke-opacity: 0.8;" fill="none" stroke="#666666" d="M275,75L75,75" stroke-width="2" stroke-opacity="0.8"/><path style="stroke-opacity: 0.8;" fill="none" stroke="#666666" d="M75,75L75,25" stroke-width="2" stroke-opacity="0.8"/><text style="text-anchor: middle; font: 15px Arial;" x="175" y="85" text-anchor="middle" font="10px "Arial"" stroke="none" fill="#000000" transform="matrix(1,0,0,1,0,6.5)" font-family="Arial" font-size="15px" font-style="normal" font-weight="normal"><tspan dy="5">x + 10 ft.</tspan></text><text style="text-anchor: end; font: 15px Arial;" x="65" y="50" text-anchor="middle" font="10px "Arial"" stroke="none" fill="#000000" font-family="Arial" font-size="15px" font-style="normal" font-weight="normal"><tspan dy="5">x ft.</tspan></text></svg></div>';
$doc = new DOMDocument();
$doc->loadHTML($html_content);
$svg = $doc->getElementsByTagName('svg');
foreach ($svg as $svg_item) {
array_push($svg_array, $svg_item);
}
print_r($svg_array);
问题是$svg_array 是空的。我知道$html_content 中肯定有<svg> 内容。
顺便说一句,我在整个页面上收到了几个警告(因为我正在循环运行上述代码)。他们就像......
“警告:DOMDocument::loadHTML() [domdocument.loadhtml]:意外的结束标记:实体中的 div,行:46 in...”
或
“警告:DOMDocument::loadHTML() [domdocument.loadhtml]: 标签 c 在实体中无效,行:119 in...”
编辑:经过深入调查,我的代码的精简版本会产生以下警告...
警告:DOMDocument::loadHTML() [domdocument.loadhtml]: Tag svg 在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]: Tag desc 在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:标签定义在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]: Tag rect 在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:实体中的标记路径无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:实体中的标记路径无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:实体中的标记路径无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:实体中的标记路径无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:标签文本在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]: Tag tspan 在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]:标签文本在实体中无效,行:2 in.....
警告:DOMDocument::loadHTML() [domdocument.loadhtml]: Tag tspan 在实体中无效,行:2 in.....
也许<svg> 不支持????
想法?
【问题讨论】:
-
是的,您至少应该将实际代码添加到问题中(或显示相同问题的缩减副本)。听起来确实很像 html 格式错误。虽然您知道 $htmlContent 包含某些内容,但您如何知道它是否已正确加载并传递给 $doc 对象?
-
@enhzflep:我正在输出它,并且正确的内容以正确的方式显示。
-
您已经在这里待了足够长的时间了,因此我们始终建议您使用 MCVE。如果您选择不提供,如果读者选择不回答您的问题,请不要感到惊讶。 :耸耸肩:stackoverflow.com/help/mcve
-
我的帖子中有代码。
$html_content的完整内容太长,无法发布。 :耸肩: -
创建一个minimal reproducible example,然后将 html 缩减到最小。
标签: php html svg domdocument