Использование DomElement для установки атрибута [class] для HTML AMP - PullRequest
0 голосов
/ 25 апреля 2018

Есть ли в любом случае ->setAttribute, что не позволяет мне установить атрибут с именем [class]?У меня есть следующий код:

    $success = $doc->createElement('span', 'You have been successfully subscribed');
    $success->setAttribute('class', 'hide');
    $success->setAttribute('[class]', 'ampState.success'); // error here
    $form->appendChild($success);

Но при попытке запустить это я получаю

PHP Fatal error:  Uncaught DOMException: Invalid Character Error in <path>

Есть ли метод более низкого уровня вручную, который я могу использовать для установки этого атрибута?

1 Ответ

0 голосов
/ 01 мая 2018

Обходной путь, который я использовал, заключался в создании псевдо-тега, который я мог бы str_replace после:

$success = $doc->createElement('span', 'You have been successfully subscribed');
$success->setAttribute('class', 'hide');

// [class] => pseudo-class
$success->setAttribute('pseudo-class', 'ampState.success'); 

$form->appendChild($success);

Затем в самом конце я создаю сгенерировать весь свой HTML ивыполнить str-replace для этого псевдокласса, чтобы вернуть его обратно:

// get all HTML inside <body></body>
$body = $doc->getElementsByTagName('body')->item(0);
foreach($body->childNodes as $childNode)
{
    $innerHTML .= $childNode->ownerDocument->saveHTML($childNode);
}

// replace pseudo-class with [class]
$innerHTML = str_replace('pseudo-class', '[class]', $innerHTML);
...