在PHP中转义json数据而不使用JS注释hack的正确方法


Proper way to escape json data in PHP without using JS comment hack

考虑下面的代码从php向js发送一个json字符串,

<?php
    $str = "<!--<script>"; // This is from user input
?>
<script>
   var json_str = <?= json_encode($str) ?>;
</script>

字符串会破坏HTML,解决这个问题的方法是通过老式的注释hack,例如

<script>
<!--
   var json_str = <?= json_encode($str) ?>;
//-->
</script>

有其他选择吗?

您可以使用标志JSON_HEX_TAG,这样<>将分别被编码为'u003C'u003E

json_encode($str, JSON_HEX_TAG)