簡體   English   中英

使用轉義斜線時的JSON語法錯誤

[英]JSON Syntax Error when using escaped slashes

完全重新編輯的問題

<?php
   $s1 = '{"req":"auth","token":"1234567\/\\"}'; // this seems to be valid, isn't it?
   $s2 = '{"req":"auth","token":"123456\/\\7"}'; // this seems to be valid, isn't it?
   $s3 = '{"req":"auth","token":"123456789"}';

   print_r(json_decode($s1,true));
   echo " - ERRORCODE FOR CASE#1 IS:" . json_last_error() . '<br />';

   print_r(json_decode($s2,true));
   echo " - ERRORCODE FOR CASE#2 IS:" . json_last_error() . '<br />';

   print_r(json_decode($s3,true));
   echo " - ERRORCODE FOR CASE#3 IS:" . json_last_error() . '<br />';
?>

結果:

 - ERRORCODE FOR CASE#1 IS:4
 - ERRORCODE FOR CASE#2 IS:4
Array ( [req] => auth [token] => 123456789 ) - ERRORCODE FOR CASE#3 IS:0

題:

為什么s1s2無法正常工作,如何解決?

我猜你在這里測試東西,因此有:

$test_json = '{"req":"auth","token":"1234567\/\\"}';

盡管單引號確實會忽略\\n ,但\\\\仍被視為單反斜杠。 這意味着您得到的JSON是:

{"red":"auth","token":"1234567\/\"}

不用說,這是語法錯誤。

如果要從外部來源獲取JSON,則無需擔心,但是如果要使用硬編碼JSON字符串進行測試,則需要:

$test_json = '{"req":"auth","token":"1234567\/\\\\"}';

您必須在json_decode之前調用stripslashes函數,即在您的第一個print_r之前添加以下兩行,以便它解碼並打印正確的數組。

$s1 = stripslashes($s1);
$s2 = stripslashes($s2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM