好的,我正在运行一个公共 JSONP API,数据由我的 PHP 服务器提供。我刚读了这篇文章:
基本上,如果我的 JSON 字符串包含 U+2028 字符(Unicode 行分隔符)或 U+2029 字符(Unicode 段落分隔符),那么这是完全有效的 JSON。但是,当使用 JSONP 时,JSON 将作为 JavaScript 执行,并且 JavaScript 中的任何字符串都不能包含文字 U+2028 或 U+2029,因为它会破坏 JavaScript。显然,只要您使用正确的 JSON 解析器,这通常不是问题,但在 JSONP 的情况下,浏览器就是JSON 解析器。
本质上,如果这些字符在我发送到客户端的 JSONP 数据中的字符串中,这将在字符串中抛出一个行或段落中断,这会破坏 JavaScript 并停止它的执行。这是一种可能性,因为 API 正在发回一些客户端输入的数据。有人可能会在数据库中输入 U+2028 或 U+2029,因此当我将其作为 JSONP 发回时,它会破坏使用我的 API 的任何实现。
所以我的问题是,在 PHP 中,我如何清理/输出转义 JSON 数据以删除或转义 U+2028 和 U+2029 字符,然后再将其发送到客户端?
目前,我的流程正在对数据数组执行json_encode并将该数据发送到客户端。我应该通过遍历数组并对其进行过滤来转义数据,还是一次转义所有 JSON 编码的字符串?
另一件事是我不确定如何在 PHP 中转义 U+2028 和 U+2029 字符。我可以做一个 str_replace 吗?我不确定 str_replace 是否是多字节安全的,并且没有 mb_str_replace函数,除非我使用一些定制的函数。那么如何删除/转义那些 unicode 字符呢?
非常感谢。