1

...或者如何以另一种方式做到这一点?

我正在使用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="&#33;">&#33;</option>
    <option value="&#34;">&#34;</option>
    <option value="&#35;">&#35;</option>
    ...
  </optgroup>
</select>

但是,使用 DOM 方法,它会自动转义所有字符引用:

<option value="&amp;#33;">&amp;#33;</option>

我怎样才能防止这种情况发生?

注意: createEntityReference不适用于此方法,因为该方法仅支持实体引用而不支持字符引用。使用它会导致“无效字符错误”的致命错误。

4

1 回答 1

-1

尝试使用 documentFragment,并在一些预制的 HTML 中添加内容:

$frag = $dom->createDocumentFragment();
$frag->loadHTML('<option value="&#33;">&#33;</option>');

$dom->appendChild($frag);

DOM 对于操作现有的树很方便,但是只使用 DOM 操作来构建新树是一个令人难以置信的痛苦。有时使用纯字符串操作构建 html/xml 会更容易,然后在一次操作中将整个字符串推入 DOM。

于 2013-10-23T15:04:36.077 回答