剛剛翻資料發現 json_encode 奇怪的老問題總算有解...
這樣的程式碼:
<?php echo json_encode("http://www.google.com/"), "\n";
會輸出這樣的結果:
"http:\/\/www.google.com\/"
這是合法的 JSON 沒錯 (JSON 規格允許 string 裡面使用 \/
),但看起來就很不爽啊,明明 /
就是可以合法輸出的字元... 然後剛剛看到 PHP 5.4.0 加上這些東西:
JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, and JSON_UNESCAPED_UNICODE options were added.
測了 JSON_UNESCAPED_SLASHES
,看起來舒服多了:
<?php echo json_encode("http://www.google.com/", JSON_UNESCAPED_SLASHES), "\n";
輸出結果是:
"http://www.google.com/"
我覺得是避免 json_encode 輸出到 HTML 碼後可能會被 XSS 攻擊的緣故,所以預設就會加上去了。
例如避免會發生以下的狀況
```
// $url = ;
$url = "http://這裡的文字會跑到 HTML 區塊裡";
// ...
```
因為系統把我的代碼過濾了
我把上面留言的代碼貼到這裡 https://jsfiddle.net/wolftotem4/7me3wLt6/