DOM Parser删除了vuejs-attributes

时间:2018-04-11 07:34:22

标签: php dom

我正在使用Masterminds / html5-php(https://github.com/Masterminds/html5-php/)来修改HTML输出的内容。

不幸的是,处理后删除了vue-js属性@submit.prevent="save | valid"

原始

<form id="formmaker-form" class="uk-form {{ formitem.data.formStyle }} {{ formitem.data.classSfx }}"
      v-validator="form" @submit.prevent="save | valid" v-cloak>
</form>

加工:

<form id="formmaker-form" class="uk-form {{ formitem.data.formStyle }} {{ formitem.data.classSfx }}" v-validator="form" v-cloak>
</form>

我的代码:

public function __construct(HTML5 $htmlParser = null)
{
    $this->htmlParser = $htmlParser ?: new HTML5();
}
public function fix($markup, $topLevel = 1, $depth = 6)
{
    if ( ! $this->isFullHtmlDocument($markup)) {
        $partialID = 'toc_generator_' . mt_rand(1000, 4000);
        $markup = sprintf("<body id='%s'>%s</body>", $partialID, $markup);
    }

    $domDocument = $this->htmlParser->loadHTML($markup);
    $domDocument->preserveWhiteSpace = true; // do not clobber whitespace

    $sluggifier = new UniqueSluggifier();

    /** @var \DOMElement $node */
    foreach ($this->traverseHeaderTags($domDocument, $topLevel, $depth) as $node) {
        if ($node->getAttribute('id')) {
            continue;
        }

        $node->setAttribute('id', $sluggifier->slugify($node->getAttribute('title') ?: $node->textContent));
    }

    return $this->htmlParser->saveHTML((isset($partialID)) ? $domDocument->getElementById($partialID)->childNodes : $domDocument);
}

由于我不能使用另一个类(html5-php是我使用的依赖项的一部分),我必须继续使用它。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以将有问题的属性替换为某个安全名称,并在所有内容后将其反转。

public function fix($markup, $topLevel = 1, $depth = 6) {
    $markup = str_replace('@submit.prevent', md5('@submit.prevent'), $markup);

    // do your magic

    return str_replace(md5('@submit.prevent'), '@submit.prevent', $markup);
}