2013-03-27 68 views
1

斜槓我試圖得到數據庫的JSON和代碼是這樣處理逃過JSON字符串

$path["file_name"] = "www.119.com\/assets\/demo\/large\/".$row["file_name"]; 

當我轉換成JSON對象,並將它這樣表示。

www.119.com\\\/assets\\\/demo\\\/large\\\/demo1.png 

我剛剛申請\打印特殊字符/,但它不工作。我應用了很多東西來打印特殊字符。將特殊字符轉換爲JSON時會出現問題嗎?

+1

你甚至不需要放一個單獨的\那裏。 – hjpotter92 2013-03-27 08:33:28

+1

'/'不是特殊字符。 – Jon 2013-03-27 08:33:42

+0

你不需要轉義正斜槓'/'。你只需要跳過反斜槓'\\'。 – Havelock 2013-03-27 08:36:59

回答

0

應該沒有必要逃避斜線,因爲它不被視爲特殊字符。

您可能需要將/替換爲//當某些系統在解析/顯示時剝去一個斜線時,會想到Windows。

1

正如其他人所提到的,正斜槓並不是字符串內部的特殊字符,在PHP或Javascript中(因爲JSON是從Javascript派生的,所以它遵循相同的字符串插值規則)。然而,如果你正在閱讀一些JSON,你可以原諒它是(雖然你應該總是 RTM ;-))。

您認爲您需要跳過斜槓的原因是由於PHP和Javascript插入多餘的正斜槓的方式存在細微的差異。考慮下面的字符串聲明,在這兩個PHP和JavaScript有效:

"AC\/DC" 

在PHP中,額外的反斜槓被視爲文字,所以:

echo "AC\/DC"; // outputs AC\/DC 

在Javascript中,多餘的反斜線下降,所以:

console.log("AC\/DC"); // logs AC/DC 

JSON任務前的轉義斜槓,但json_encode()將利用這一轉義照顧你。你不需要自己添加反斜槓到字符串。由於這些附加反斜槓的插入方式不同,因此不能簡單地將JSON字符串放入PHP源代碼中,因爲它將被解釋爲不同的值。

Since PHP 5.4.0您可以在PHP中提供JSON_UNESCAPED_SLASHES標誌爲json_encode()以防止它添加反斜槓。但是這是不必要的,可能會導致嚴格的JSON解析器拒絕數據。

所以總結起來,申報你的字符串在PHP中正確的方法是:

$path["file_name"] = "www.119.com/assets/demo/large/".$row["file_name"]; 

作爲一個側面說明,你可能還包括什麼http://在字符串的開頭,並通過$row['file_name']通過urlencode()因爲數據似乎是一個URL:

$path["file_name"] = "http://www.119.com/assets/demo/large/".urlencode($row["file_name"]); 
+0

所以。我應該怎麼做才能打印www.119.com/asset/demo/large – user2064667 2013-03-27 09:02:12

+0

謝謝。我知道了。 – user2064667 2013-03-27 09:03:24

+0

@ user2064667從PHP 5.4.0開始,您可以在PHP中爲'json_encode()'提供'JSON_UNESCAPED_SLASHES'標誌,以防止它添加反斜槓。但是這是不必要的,可能會導致嚴格的JSON解析器拒絕數據。 – DaveRandom 2013-03-27 09:05:48