将编码的 php json 传递给 javascript
pass encoded php json to javascript
我在 PHP 和 javascript 中提交的申请有问题。
我有一个 ajax 调用函数 php 从数据库中获取值。
我检索了许多带有字段的记录,在其中我有一个名为 description
的字段,其值如下:
<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>
在我对 json 进行编码后,将其放入 javascript 并打印出来。但结果是:
TEST+IT
non+grassetto++
我的代码是这样的:
AJAX 来电:
$.ajax({
url: site_url_database,
type: "GET",
async: true,
data: window.location.search,
dataType: "json",
timeout: 30000,
success: function(data) {
_.each(data.hotel, function(d, index_d) {
data.hotel[index_d].description = decodeURIComponent(d.description);
});
},
error: function(data) {
}
})
PHP获取字段描述的函数:
....
$hotel_array['description'] = urlencode($row->hotel_description);
....
//encode array to return
$hotel_array = json_encode($hotel_array);
echo($hotel_array);
我在 javascript (Backbone) 中打印它之后,但是如果我制作一个 console.log()
我得到这个:
TEST+IT
non+grassetto++
怎样才能打印好?
谢谢
P.S。我不能改变工作方式所以我需要一个ajax调用一个函数php并在Backbone/javascript中打印它我只需要很好地编码和解码
我已经在php中尝试过:
$hotel_array['description'] = addslashes(htmlentities($row->hotel_description));
在javascript中我尝试使用:
https://raw.githubusercontent.com/kvz/phpjs/master/functions/url/urldecode.js
HTML Entity Decode
PHP 似乎在将 HTML 标签传递给浏览器之前将其剥离。在编码之前检查以确保 PHP 函数中没有 strip_tags()
函数。
Javascript的decodeURIComponent()
不会删除PHP的urlencode()
添加的+
个字符;它期望 space 被编码为 %20
,而不是 +
:
$hotel_array['description'] = urlencode($row->hotel_description);
php > echo $hotel_array['description'];
%3Cp%3E%3Cstrong%3ETEST+IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon+gras%3Cspan+style%3D%22color%3A+rgb%28192%2C+145%2C+0%29%3B%22%3Esett%3C%2Fspan%3Eo++%3C%2Fp%3E
然后,在Javascript:
>js s = '%3Cp%3E%3Cstrong%3ETEST+IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon+gras%3Cspan+style%3D%22color%3A+rgb%28192%2C+145%2C+0%29%3B%22%3Esett%3C%2Fspan%3Eo++%3C%2Fp%3E';
>js decodeURIComponent(s);
<p><strong>TEST+IT</strong></p><p>non+gras<span+style="color:+rgb(192,+145,+0);">sett</span>o++</p>
如您所见,+
个字符保留在解码后的字符串中。
您可以使用遵循 RFC 3986 并将 space 编码为 %20
.
的 rawurlencode()
php > $s = rawurlencode('<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>');
php > echo $s;
%3Cp%3E%3Cstrong%3ETEST%20IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon%20gras%3Cspan%20style%3D%22color%3A%20rgb%28192%2C%20145%2C%200%29%3B%22%3Esett%3C%2Fspan%3Eo%20%20%3C%2Fp%3E
然后在 Javascript:
js> decodeURIComponent('%3Cp%3E%3Cstrong%3ETEST%20IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon%20gras%3Cspan%20style%3D%22color%3A%20rgb%28192%2C%20145%2C%200%29%3B%22%3Esett%3C%2Fspan%3Eo%20%20%3C%2Fp%3E');
<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>
或者,如果您无法修改 PHP 代码,您可以手动将 +
替换为 ' '
:
js> s = '%3Cp%3E%3Cstrong%3ETEST+IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon+gras%3Cspan+style%3D%22color%3A+rgb%28192%2C+145%2C+0%29%3B%22%3Esett%3C%2Fspan%3Eo++%3C%2Fp%3E';
js> decodeURIComponent(s).replace(/\+/g, ' ');
<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>
我在 PHP 和 javascript 中提交的申请有问题。
我有一个 ajax 调用函数 php 从数据库中获取值。
我检索了许多带有字段的记录,在其中我有一个名为 description
的字段,其值如下:
<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>
在我对 json 进行编码后,将其放入 javascript 并打印出来。但结果是:
TEST+IT
non+grassetto++
我的代码是这样的:
AJAX 来电:
$.ajax({
url: site_url_database,
type: "GET",
async: true,
data: window.location.search,
dataType: "json",
timeout: 30000,
success: function(data) {
_.each(data.hotel, function(d, index_d) {
data.hotel[index_d].description = decodeURIComponent(d.description);
});
},
error: function(data) {
}
})
PHP获取字段描述的函数:
....
$hotel_array['description'] = urlencode($row->hotel_description);
....
//encode array to return
$hotel_array = json_encode($hotel_array);
echo($hotel_array);
我在 javascript (Backbone) 中打印它之后,但是如果我制作一个 console.log()
我得到这个:
TEST+IT
non+grassetto++
怎样才能打印好?
谢谢
P.S。我不能改变工作方式所以我需要一个ajax调用一个函数php并在Backbone/javascript中打印它我只需要很好地编码和解码
我已经在php中尝试过:
$hotel_array['description'] = addslashes(htmlentities($row->hotel_description));
在javascript中我尝试使用: https://raw.githubusercontent.com/kvz/phpjs/master/functions/url/urldecode.js
HTML Entity Decode
PHP 似乎在将 HTML 标签传递给浏览器之前将其剥离。在编码之前检查以确保 PHP 函数中没有 strip_tags()
函数。
Javascript的decodeURIComponent()
不会删除PHP的urlencode()
添加的+
个字符;它期望 space 被编码为 %20
,而不是 +
:
$hotel_array['description'] = urlencode($row->hotel_description);
php > echo $hotel_array['description'];
%3Cp%3E%3Cstrong%3ETEST+IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon+gras%3Cspan+style%3D%22color%3A+rgb%28192%2C+145%2C+0%29%3B%22%3Esett%3C%2Fspan%3Eo++%3C%2Fp%3E
然后,在Javascript:
>js s = '%3Cp%3E%3Cstrong%3ETEST+IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon+gras%3Cspan+style%3D%22color%3A+rgb%28192%2C+145%2C+0%29%3B%22%3Esett%3C%2Fspan%3Eo++%3C%2Fp%3E';
>js decodeURIComponent(s);
<p><strong>TEST+IT</strong></p><p>non+gras<span+style="color:+rgb(192,+145,+0);">sett</span>o++</p>
如您所见,+
个字符保留在解码后的字符串中。
您可以使用遵循 RFC 3986 并将 space 编码为 %20
.
rawurlencode()
php > $s = rawurlencode('<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>');
php > echo $s;
%3Cp%3E%3Cstrong%3ETEST%20IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon%20gras%3Cspan%20style%3D%22color%3A%20rgb%28192%2C%20145%2C%200%29%3B%22%3Esett%3C%2Fspan%3Eo%20%20%3C%2Fp%3E
然后在 Javascript:
js> decodeURIComponent('%3Cp%3E%3Cstrong%3ETEST%20IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon%20gras%3Cspan%20style%3D%22color%3A%20rgb%28192%2C%20145%2C%200%29%3B%22%3Esett%3C%2Fspan%3Eo%20%20%3C%2Fp%3E');
<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>
或者,如果您无法修改 PHP 代码,您可以手动将 +
替换为 ' '
:
js> s = '%3Cp%3E%3Cstrong%3ETEST+IT%3C%2Fstrong%3E%3C%2Fp%3E%3Cp%3Enon+gras%3Cspan+style%3D%22color%3A+rgb%28192%2C+145%2C+0%29%3B%22%3Esett%3C%2Fspan%3Eo++%3C%2Fp%3E';
js> decodeURIComponent(s).replace(/\+/g, ' ');
<p><strong>TEST IT</strong></p><p>non gras<span style="color: rgb(192, 145, 0);">sett</span>o </p>