首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP JSONP 單引號跳脫完整解決方案

     編輯:PHP 相關知識

解決 JSONP 回呼函數中單引號導致的 JS 語法錯誤

JSONP 回傳格式為 callback('json string');,若 JSON 字串內含單引號,會導致 JavaScript 解析錯誤。PHP 提供兩種標準解決方案。

方案一:json_encode + JSON_HEX_APOS(推薦)

<?php
$result = ["msg" => "It's a test"]; // 含單引號
$ret = json_encode($result, JSON_HEX_APOS); // 將 ' 轉為 \u0027

header('Content-Type: text/javascript; charset=utf-8');
echo $callback . '(\'' . $ret . '\');';
// 輸出:callback('{"msg":"It\u0027s a test"}');

JSON_HEX_APOS 為 PHP 5.3+ 內建常數,專門處理此情境,安全可靠。

方案二:字串手動替換(適用非 json_encode 情境)

<?php
$jsonData = "{'msg': \"It's a test\"}"; // 手工拼接的 JSON 字串
$jsonData = preg_replace('/\'/', '\u0027', $jsonData);

echo $callback . '(\'' . $jsonData . '\');';

原理說明

  • \u0027 是 Unicode 碼位表示單引號,JSON 解析器可正確還原。
  • 不影響雙引號,符合 JSON 標準(JSON 字串必須用雙引號包裹)。
  • 前端 JSON.parse() 或 jQuery 自動處理時均能正確還原為單引號。

完整範例

<?php
$callback = $_GET['callback'] ?? 'callback';
$data = ['status' => 'ok', 'info' => "User's data"];

$json = json_encode($data, JSON_HEX_APOS | JSON_UNESCAPED_UNICODE);
header('Content-Type: application/javascript; charset=utf-8');
echo "{$callback}({$json});";
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved