如何解决DomElement设置AMP HTML的[class]属性时的无效字符错误?
解决PHP DOMElement设置AMP [class]属性的报错问题
这个报错的根源很明确:PHP的DOM扩展严格遵循XML规范,而XML属性名不允许包含[和]这类特殊字符,所以直接用setAttribute('[class]', ...)会触发Invalid Character Error。不过我们有两种绕开这个限制的方法,完美适配AMP的特殊属性需求:
方法一:手动创建DOM属性节点并添加
直接创建DOMAttr对象,设置好属性名和值后,再把它附加到目标元素上——这种方式不会触发DOM对属性名的合法性检查:
$success = $doc->createElement('span', 'You have been successfully subscribed'); $success->setAttribute('class', 'hide'); // 手动创建[class]属性节点 $ampClassAttr = $doc->createAttribute('[class]'); $ampClassAttr->value = 'ampState.success'; $success->appendChild($ampClassAttr); $form->appendChild($success);
方法二:用DOMDocumentFragment直接解析XML片段
如果你更习惯写HTML/AMP的原始标记,可以用文档片段直接解析包含特殊属性的元素,这种方式也能绕过属性名检查:
$fragment = $doc->createDocumentFragment(); // 直接写入完整的AMP元素标记 $fragment->appendXML('<span class="hide" [class]="ampState.success">You have been successfully subscribed</span>'); $form->appendChild($fragment);
两种方法都能生成符合AMP要求的元素,你可以根据自己的代码风格选择适合的方式。
内容的提问来源于stack exchange,提问作者Syntactic Fructose
相关产品推荐
相关产品推荐

