DOMDocument> setAttribute()>布尔属性?

时间:2016-10-16 00:04:51

标签: php domdocument dom-manipulation

我尝试创建一个可以压缩HTML的PHP​​类,所以我想替换例如必需=“必需”。但是如何通过DOMDocument添加bool属性?

代码:https://3v4l.org/Ot9th

$doc = new DOMDocument("1.0");
$node = $doc->createElement("input");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("required", '');
var_dump($doc->saveHTML());

结果:

<input required=""></para>

预期:

<input required></para>

2 个答案:

答案 0 :(得分:1)

PHP's DOMDocument创建了一个有效的XML结构,并根据XML 1.0XML 1.1 - 添加空属性无效。

布尔属性的值应与属性名称相同。

  

这是有效的:

<input required="required"></para>


  

NOT 有效:

<input required></para>

更新

savehtml功能根据dtd验证内容。根据{{​​3}},这是作为空属性有效的属性列表:

checked
disabled
readonly
multiple
selected
compact
noshade
declare
ismap
nohref
nowrap

任何其他属性必须具有值

答案 1 :(得分:0)

好的,我可以使用random_bytes()和str_replace()来解决问题......

代码:https://3v4l.org/WiW8m

$rand = md5(random_bytes(16));
$doc = new DOMDocument("1.0");
$node = $doc->createElement("input");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("required", 'delete-this' . $rand);

var_dump(
  str_replace(
    array('="delete-this' . $rand . '"'), 
    array(''), 
    $doc->saveHTML()
  )
);