提问人:André Rodrigues 提问时间:8/23/2023 最后编辑:André Rodrigues 更新时间:8/23/2023 访问量:40
DOMDocument 从标记中删除侦听器
DOMDocument remove listeners from tags
问:
我将 DOMDocument 与使用 Framework/Lib 并具有事件侦听器的 HTML 一起使用,但只是忽略了具有“AT=@”的属性:
$html = '<button @click="test()">ÁÈ</button>';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $html);
dump($dom);
// Expected to happen - <button @click="test()">ÁÈ</button>
// Actually resulted - <button>ÁÈ</button>
请注意,由于 DOMDocument,已从字符串中删除。@click="test()"
答:
2赞
nice_dev
8/23/2023
#1
您需要删除所有带有前缀的事件侦听器,为此,您可以使用 preg_replace
来执行此操作。在正则表达式组编号的帮助下进行替换时,取回事件侦听器的名称。@
<?php
$html = '<button @click="test()">ÁÈ</button>';
$html = preg_replace('/@([a-z]+)\=/i', '$1=', $html);
echo $html;
// rest of your code
/*
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $html);
*/
评论
1赞
André Rodrigues
8/23/2023
多谢!我只是在前面增加一个前缀,例如:。因此,我可以找到切换回事件侦听器的位置。$1=
'tmp_at_event_listener_$1='
@
0赞
nice_dev
8/23/2023
@AndréRodrigues 当然,一旦解决方案到位,您就可以自由地挑选和调整东西。
0赞
André Rodrigues
8/23/2023
利用这个疑问,我正在考虑性能,我认为把它放在 DOMDocument 中对我来说没有意义,为此preg_replace做一个 foreach,我是否可以在已经包含我的 HTML 的字符串中使用 preg_replace?示例:从所有 img 标签附加 src?
0赞
nice_dev
8/24/2023
@AndréRodrigues 你能编辑你的帖子并举个例子吗?到目前为止,我很难理解。
评论
@click
@
libxml_use_internal_errors(true);
error parsing attribute name
@