您可以更换U+2028
, U+2029
with "\u2028"
, "\u2029"
无论是在 PHP 端还是 JavaScript 端,或者两者,只要它至少发生一次就没关系(它是幂等的)。
您可以使用普通的字符串替换函数。它们不需要是“多字节安全”的,并且您可以在任何 Unicode 编码中轻松地做到这一点(UTF-8、UTF-16、UTF-32 都同样好)。上次我检查时 PHP 没有 Unicode 转义序列,这只是 PHP 是一个笑话的又一个原因,但你可以使用\x
使用UTF-8转义...
(简而言之,没有多字节字符串替换函数的原因是因为它是多余的——它与非多字节字符串替换函数完全相同。)
// Javascript
data = data.replace("\u2028", "\\u2028").replace("\u2029", "\\u2029");
// PHP
$data = str_replace("\xe2\x80\xa8", '\\u2028', $data);
$data = str_replace("\xe2\x80\xa9", '\\u2029', $data);
或者你什么也不做,因为 PHP 默认转义非 Unicode 字符json_encode()
:
// Safe
echo json_encode("\xe2\x80\xa9");
--> "\u2029"
// Correct JSON, but invalid Javascript...
// (Well, technically, JSON root must be array or object)
echo json_encode("\xe2\x80\xa9", JSON_UNESCAPED_UNICODE);
--> "
"