......或者如何以另一种方式做到这一点?
我正在使用DOMDocument创建一个选择框。
$field = $this->dom->createElement('select');
$optgroup = $this->dom->createElement('optgroup');
foreach($options as $v) {
$option = $this->dom->createElement('option');
$option->setAttribute('value', $v);
$option->appendChild($this->dom->createTextNode($v));
$optgroup->appendChild($option);
}
$field->appendChild($optgroup);
其中$options
是从图标字体预先加载的字符引用数组:
array('!', '"', '#', '$', ...);
我需要输出看起来像这样:
<select>
<optgroup>
<option value="!">!</option>
<option value=""">"</option>
<option value="#">#</option>
...
</optgroup>
</select>
但是,使用DOM方法,它会自动转义所有字符引用:
<option value="&#33;">&#33;</option>
如何防止这种情况发生?
注意: createEntityReference
不起作用,因为该方法仅支持实体引用而不支持字符引用。使用它会导致“无效字符错误”致命错误。
答案 0 :(得分:0)
尝试使用documentFragment,然后填写一些预先制作的HTML:
$frag = $dom->createDocumentFragment();
$frag->loadHTML('<option value="!">!</option>');
$dom->appendChild($frag);
DOM可以方便地操作现有树,但使用DOM操作构建新树是一个令人难以置信的PAIN。有时候使用普通的字符串操作构建你的html / xml会更容易,然后在一次操作中将整个字符串推送到DOM中。