我正在开发页面构建器小部件。我必须将编辑页面的整个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
不会解决这个问题,因为它将<
和>
转换为<
和>
。页面构建器JavaScript不理解它。你有什么建议吗?
浏览器在查找</script>
标记时通常不会解析脚本。首先,他们提取<script>
和</script>
之间的所有内容,然后将其解析为JavaScript。标签周围使用什么类型的引号并不重要,因为此时不会对其进行解析。
当您有一个包含</script>
的文本字符串时,避免出现问题的常用方法是将其拆分。
window.localStorage.setItem('test', `</sc` + `ript>`);
请参阅为什么在使用 document.write(( 编写时拆分