JSONP(JSON with Padding)是一個非官方的協議,他的實現方式大致就是:讓客戶端決定要回調的Javascript函數名,在第三方服務端將 JSON 數據拼裝到回調函數名中,返回的就是參數為JSON數據的函數調用腳本,瀏覽器加載腳本并執行達到獲取第三方數據的目的。
php中jsonp輸出時一般用下面的格式:
復制代碼代碼如下:
callbackname('json string');
如果中間的json string中含有單引號,這個輸出就是有問題的,調用方一般是無法處理的,所以我們要對單引號進行轉義。
如果是用json_encode方式生成可以用下面的方式轉義:
復制代碼代碼如下:
$ret = json_encode($result, JSON_HEX_APOS);
header('Content-Type: text/javascript; charset=utf-8');
echo $callback . '(/'' . $ret . '/');';
這里 JSON_HEX_APOS 是php是提供的把單引號換為 /u0027 了。
如果是字符串拼接的,可以用下面的方式:
復制代碼代碼如下:
$jsonData = preg_replace('//'/', '/u0027', $jsonData);
然后再輸出。