목차
php 解析HTML post过来的json字符串
Jun 23, 2016 pm 01:54 PM
html
json
php
post
분석하다
我在js里把一个json对象转为json字符串,然后放到一个隐含的input里提交到php
这是HTML的部分
<input type="hidden" name="epqsql" id="epqsql" value="[{"table":"epq","field":"stand4","max":60,"min":null}]">
로그인 후 복사
로그인 후 복사
php里获取到的字符串是:
[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]
로그인 후 복사
对字符串处理
$json_string=$_POST['json'];$json=htmlspecialchars_decode($json_string);print_r(json_decode($json));//结果是空的
로그인 후 복사
换一下
$json=stripslashes(htmlspecialchars_decode($json_string));print_r(json_decode($json));//结果还是空的
로그인 후 복사
再改一下
$json=stripslashes(stripslashes(htmlspecialchars_decode($json_string)));print_r(json_decode($json));//好吧,结果还是空的
로그인 후 복사
回复讨论(解决方案)
也真难为你了,做那么复杂的编码处理
$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$s = html_entity_decode($s);$s = stripslashes($s);print_r(json_decode($s, 1));
로그인 후 복사
로그인 후 복사
Array( [0] => Array ( [table] => a [field] => value [max] => 60 [min] => ))
로그인 후 복사
로그인 후 복사
$str='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$new=htmlspecialchars_decode($str);$new=str_replace('\\','',$new);$new1=json_decode($new,true);echo "";print_r($new1);echo "로그인 후 복사
로그인 후 복사
Array
(
[0] => Array
(
[table] => a
[field] => value
[max] => 60
[min] =>
)
)
也真难为你了,做那么复杂的编码处理
$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$s = html_entity_decode($s);$s = stripslashes($s);print_r(json_decode($s, 1));
로그인 후 복사
로그인 후 복사
Array( [0] => Array ( [table] => a [field] => value [max] => 60 [min] => ))
로그인 후 복사
로그인 후 복사
还是不行哦
但是我在php里直接写$json_string='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';是可以的,难道POST里的数据不一样?
$str='[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';$new=htmlspecialchars_decode($str);$new=str_replace('\\','',$new);$new1=json_decode($new,true);echo "";print_r($new1);echo "로그인 후 복사
로그인 후 복사
Array
(
[0] => Array
(
[table] => a
[field] => value
[max] => 60
[min] =>
)
)
这个方法试过了,并没有错,只是如果把
$s = '[{\\"table\\":\\"a\\",\\"field\\":\\"value\\",\\"max\\":60,\\"min\\":null}]';
로그인 후 복사
换成
$s=$_POST['json'];
로그인 후 복사
就不行了
可以问题出在POST的数据上,
但是在HTML里用js的eval把字符串转为json对象又能正常换行哦
echo base64_encode($_POST['json']);
贴出结果
base64_encode后echo出来
W3tcXCZhbXA7cXVvdDt0YWJsZVxcJmFtcDtxdW90OzpcXCZhbXA7cXVvdDtlcHFcXCZhbXA7cXVvdDssXFwmYW1wO3F1b3Q7ZmllbGRcXCZhbXA7cXVvdDs6XFwmYW1wO3F1b3Q7c3RhbmQ0XFwmYW1wO3F1b3Q7LFxcJmFtcDtxdW90O21heFxcJmFtcDtxdW90Ozo2MCxcXCZhbXA7cXVvdDttaW5cXCZhbXA7cXVvdDs6bnVsbH1dW10=W10=
로그인 후 복사
echo base64_encode($_POST['json']);
贴出结果
看了base64的编码和解码知道了,要用两次html_entity_decode才行,谢谢版主大人,谢谢jam00,结账
HTML里看到的是
<input type="hidden" name="epqsql" id="epqsql" value="[{"table":"epq","field":"stand4","max":60,"min":null}]">
로그인 후 복사
로그인 후 복사
但是到了PHP就成了
[{\\&quot;table\\&quot;:\\&quot;epq\\&quot;,\\&quot;field\\&quot;:\\&quot;stand4\\&quot;,\\&quot;max\\&quot;:60,\\&quot;min\\&quot;:null}]
로그인 후 복사
(echo输出到html是看不到"这个的)
所以要html_entity_decode两次
$s = 'W3tcXCZhbXA7cXVvdDt0YWJsZVxcJmFtcDtxdW90OzpcXCZhbXA7cXVvdDtlcHFcXCZhbXA7cXVvdDssXFwmYW1wO3F1b3Q7ZmllbGRcXCZhbXA7cXVvdDs6XFwmYW1wO3F1b3Q7c3RhbmQ0XFwmYW1wO3F1b3Q7LFxcJmFtcDtxdW90O21heFxcJmFtcDtxdW90Ozo2MCxcXCZhbXA7cXVvdDttaW5cXCZhbXA7cXVvdDs6bnVsbH1dW10=W10=';$s = base64_decode($s);$s = str_replace('\\', '', $s);$s = html_entity_decode($s);$s = html_entity_decode($s);echo $s, PHP_EOL;print_r(json_decode(substr($s, 0, -4), 1));
로그인 후 복사
[{"table":"epq","field":"stand4","max":60,"min":null}][]?Array( [0] => Array ( [table] => epq [field] => stand4 [max] => 60 [min] => ))
로그인 후 복사
其实这种一般性调试,是应该熟练掌握的
自己看看就知道是怎么回事了
其实这种一般性调试,是应该熟练掌握的
谢谢版主!
我用PHP没多久,也没系统的学过,很多都还不会
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

인기 기사
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

인기 기사
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7129
9


자바 튜토리얼
1534
14


라라벨 튜토리얼
1256
25


PHP 튜토리얼
1205
29


Cakephp 튜토리얼
1153
46



Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드
