好的我正在运行一个公共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字符?
非常感谢.