0

如果我在 uri 请求中以 json 格式传递我的搜索参数怎么办:

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

4 回答 4

1

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

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

不要使用$request = striplashes(strip_tags($request)). 如果$_GET['search']不成功json_decode,将其视为错误输入;不要试图修复它。

于 2013-08-18T10:56:54.023 回答
0

发送一个编码的 JSON 字符串是可能的,就像任何字符串一样(你应该urlencode这样urldecode做,但不需要剥离),但这并不是一个真正的好方法——使用在请求中传递数据的标准方式——如果你只有简单的数据发送,只需将其转换为传统的 GET 变量(这真的很容易,例如,http_build_query正如 Tomasz 所建议的那样)。如果您将太多数据打包到 JSON 对象中,您也可能会遇到请求 URI 长度的问题(请参阅不同浏览器中 URL 的最大长度是多少? )。

于 2013-08-18T10:49:06.493 回答
0

http_build_query使用而不是传递 JSON 抛出 URL 不是更好吗?HTTP_build_query 专门设计用于传递数据 throw url 参数。

将此过滤器应用于整个param_strURL 可能会导致意外行为,而且实际上速度会更快一些。我认为你应该传递每一个参数来抛出你的过滤器函数。

于 2013-08-18T10:49:09.750 回答
-1

为什么不直接用 JSON 来表示一切?

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

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

于 2013-08-18T10:56:06.873 回答