uri请求中的JSON

时间:2013-08-18 10:43:50

标签: php json query-string

如果我以json格式在uri请求中传递我的搜索参数,如下所示:

http://example.com/?search={"title":"Some+Title","category":12}

而不是

http://example.com/?title=Some+Title&category=12

在解码json-request之前我可以使用像strip_tags(),strpslashes()等一些函数来过滤它...但我可以使用serialize()/ unserialize()对$ _SERVER ['QUERY_STRING']进行相同的操作。或者将字符串过滤器应用于N个字符串请求,而不是整个请求。

您认为哪种方式更好,更实用,更快速处理?

使用json

$request = $_GET['search'];
$request = stripslaches(strip_tags($request));
$params  = json_decode($request);

4 个答案:

答案 0 :(得分:0)

发送编码的JSON字符串是可能的,就像任何字符串一样(你应该urlencodeurldecode,但不需要剥离)但它真的是一个很好的方法这样做 - 使用标准的方式在请求中传递数据 - 如果您只有简单的数据要发送,只需将其转换为传统的GET变量(这很容易,例如Tomasz建议的http_build_query)。如果将太多数据打包到JSON对象中,您可能还会遇到请求URI长度的困难(请参阅What is the maximum length of a URL in different browsers?)。

答案 1 :(得分:0)

使用http_build_query而不是传递JSON throw URL不是更好吗? HTTP_build_query专门用于传递数据throw url params。

将此过滤器应用于整个param_str的URL可能会导致意外行为,除了事实上实际上要快一点。 我认为你应该传递每个参数抛出你的过滤函数。

答案 2 :(得分:0)

根据RFC 1738 2.2,字符 {} 是不安全的。因此,必须在通过网络传输之前对它们进行编码。

根据RFC 1738 2.2保留字符。因此,必须在通过网络传输之前对其进行编码,除非它用于保留它的目的。

请勿使用$request = striplashes(strip_tags($request))。如果$_GET['search']没有json_decode成功,则将其视为错误输入;不要试图解决它。

答案 3 :(得分:-1)

为什么不用JSON代表所有内容?

http://www.example.com/{"article":"something","page":12,"fragment":"#menu"}

查询字符串已经用于表示键值对的平面列表,那么您的JSON解决方案会解决什么问题?你只是在没有任何好处的情况下添加一层新的复杂性。