Есть ли причины, по которым функция PHP json_encode не удаляет все JSON управляющие символы в строке?
Например, возьмите строку, которая охватывает две строки и имеет в ней управляющие символы (\ r\n "/\):
<?php
$s = <<<END
First row.
Second row w/ "double quotes" and backslash: \.
END;
$s = json_encode($s);
echo $s;
// Will output: "First row.\r\nSecond row w\/ \"double quotes\" and backslash: \\."
?>
Обратите внимание, что символы возврата каретки и новой строки не отображаются. Почему?
Я использую jQuery в качестве моей JS-библиотеки, и функция $.getJSON() отлично справится, когда вы полностью, 100% доверяете входящим данным. В противном случае я использую JSON.org library json2.js, как и все остальные. Но если вы попытаетесь разобрать эту закодированную строку, она выдает ошибку:
<script type="text/javascript">
JSON.parse(<?php echo $s ?>); // Will throw SyntaxError
</script>
И вы не можете получить данные! Если вы удалите или убери \r\n "и\в этой строке, то JSON.parse() не будет вызывать ошибку.
Есть ли какая-либо существующая хорошая функция PHP для экранирования управляющих символов. Простая str_replace с поиском и заменой массивов не будет работать.