PHP 5.4 的 json_encode 增加 JSON_UNESCAPED_SLASHES...

剛剛翻資料發現 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/"

2 thoughts on “PHP 5.4 的 json_encode 增加 JSON_UNESCAPED_SLASHES...”

  1. 我覺得是避免 json_encode 輸出到 HTML 碼後可能會被 XSS 攻擊的緣故,所以預設就會加上去了。

    例如避免會發生以下的狀況

    ```

    // $url = ;
    $url = "http://這裡的文字會跑到 HTML 區塊裡";

    // ...

    ```

Leave a Reply

Your email address will not be published. Required fields are marked *