如果我以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个字符串请求,而不是整个请求。
您认为哪种方式更好,更实用,更快速处理?
$request = $_GET['search'];
$request = stripslaches(strip_tags($request));
$params = json_decode($request);
答案 0 :(得分:0)
发送编码的JSON字符串是可能的,就像任何字符串一样(你应该urlencode
和urldecode
,但不需要剥离)但它不真的是一个很好的方法这样做 - 使用标准的方式在请求中传递数据 - 如果您只有简单的数据要发送,只需将其转换为传统的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解决方案会解决什么问题?你只是在没有任何好处的情况下添加一层新的复杂性。