簡體   English   中英

將編碼的php json傳遞給javascript

[英]pass encoded php json to javascript

我用PHP和javascript制作的應用程序有問題。

我對從數據庫獲取值的函數php進行了ajax調用。 我檢索了許多帶有字段的記錄,並且在其中有一個名為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(主干網)打印后,但是如果我創建了console.log()則會得到以下信息:

TEST+IT

    non+grassetto++

如何打印好?

謝謝

PS:我無法更改工作方法,因此我需要一個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實體解碼

JavaScript的decodeURIComponent()不會刪除PHP的urlencode()添加的+字符; 它期望將空間編碼為%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的rawurlencode()並將空格編碼為%20

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在將HTML標記傳遞給瀏覽器之前會剝離HTML標記。 在對它進行編碼之前,請檢查並確保PHP函數中沒有strip_tags()函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM