我有这样的网址请求:
http://localhost/pro/api/index/update_profile?data={"id":"51","name":"abc","address":"stffu fsagu asfhgui fsahgiu3#$@^^@#%^3 6\"\"wkgforqf\";rqgjrg..,,,rqwgtr''qwrgtrw'trwqt'rqwtqwr trqt\n"}
我正在尝试对这个url进行json解码。我使用以下代码来解码url。如果url不包含特殊字符,它的工作正常。但如果它包含特殊字符,如何解码它。
$string = htmlspecialchars($_REQUEST['data'], ENT_QUOTES);
$jsonFix = urldecode($string);
$string = htmlentities($jsonFix, ENT_QUOTES | ENT_IGNORE, "UTF-8");
$json = json_decode($string, true);
print_r($json);exit;
我尝试了这段代码,但它无法正常工作。当我尝试以下内容时:
的print_r($ _ REQUEST [ '数据']);出口;
输出是:
{“id”:“51”,“name”:“ds”“,”address“:”stffu fsagu asfhgui fsahgiu3
表示它来自#
字符
(旁注:我正在为iphone工作,所以请求来自iphone,框架:CI)
那么如何获取包含特殊字符的url以及如何解码它?
答案 0 :(得分:3)
The #
character marks the beginning of the fragment part of the URL.
您需要对网址进行正确的网址编码才能实现此目的。
例如,正确进行URL编码后,您的JSON将变为:
%7B%22id%22%3A%2251%22%2C%22name%22%3A%22abc%22%2C%22address%22%3A%22stffu%20fsagu%20asfhgui%20fsahgiu3%23%24%40%5E%5E%40%23%25%5E3%206%5C%22%5C%22wkgforqf%5C%22%3Brqgjrg..%2C%2C%2Crqwgtr%27%27qwrgtrw%27trwqt%27rqwtqwr%20trqt%5Cn%22%7D
整个网址变为:
http://localhost/pro/api/index/update_profile?data=%7B%22id%22%3A%2251%22%2C%22name%22%3A%22abc%22%2C%22address%22%3A%22stffu%20fsagu%20asfhgui%20fsahgiu3%23%24%40%5E%5E%40%23%25%5E3%206%5C%22%5C%22wkgforqf%5C%22%3Brqgjrg..%2C%2C%2Crqwgtr%27%27qwrgtrw%27trwqt%27rqwtqwr%20trqt%5Cn%22%7D
查看所选语言的文档,找到URL编码字符的正确方法。
例如,在PHP中,这是rawurlencode
,而在JavaScript中,这是encodeURIComponent
。
如有必要,网上还有很多网址编码器,例如this website。
答案 1 :(得分:1)
您正在以某些方式操纵$data
,这些方式并非真正必要。如果应用于特定值,则htmlspecialchars()
和htmlentities()
有意义 - 而不是整个JSON。危险在于他们搞砸了JSON,这对urldecode()
来说非常重要!
$jsonFix = urldecode($data);
$json = json_decode($jsonFix, true);
此already works并且不会留下任何角色。
如果您计划发布某些内容并想要逃避它,您可以这样做
htmlspecialchars($json['address'], ENT_QUOTES)
答案 2 :(得分:-1)
你不能用“& hashtagChar”之类的东西替换“#”字符吗?在你处理之前,然后把它放回去?