脚本标记的结束是否优先于反引号?



我正在开发页面构建器小部件。我必须将编辑页面的整个html保存到本地存储和数据库中。PHP 脚本将从数据库中加载保存的 html,javascript 会将其保存到本地存储,页面构建器小部件脚本将解析保存在本地存储中的 html。

问题是当 html 包含<script></script>标记时,它不会成功加载。例如,如果 html 包含script标记,则以下脚本将显示错误。

<script>
<?php $html = $db->getPageHtml();?>
window.localStorage.setItem('pb_html', `<?php echo $html?>`);
</script>

例如,如果$html设置为</script>则以下脚本将显示错误:

<script>
window.localStorage.setItem('test', `</script>`);
</script>

其他 html 标记已成功呈现。我认为当浏览器解析javascript时,</script>优先于'(反引号(。

PHP 函数htmlspecialchar不会解决这个问题,因为它将<>转换为&lt;&gt;。页面构建器JavaScript不理解它。你有什么建议吗?

浏览器在查找</script>标记时通常不会解析脚本。首先,他们提取<script></script>之间的所有内容,然后将其解析为JavaScript。标签周围使用什么类型的引号并不重要,因为此时不会对其进行解析。

当您有一个包含</script>的文本字符串时,避免出现问题的常用方法是将其拆分。

window.localStorage.setItem('test', `</sc` + `ript>`);

请参阅为什么在使用 document.write(( 编写时拆分

最新更新