簡體   English   中英

PHP AJAX調用MySQL數據庫。 如何正確轉義返回(json_encode)到頁面的HTML數據?

[英]PHP AJAX call to MySQL database. How to properly escape HTML data returned (json_encode) to page?

我的數據庫包含帶有包含的HTML腳本標記的記錄。 我已經閱讀了許多有關如何在使用json_encode / AJAX的情況下如何處理這種情況的選項。

我應該使用JS函數來轉義客戶端的特殊字符,還是可能缺少我缺少的PHP解決方案?

編輯假設:用戶不想剝離/刪除html標簽,只想在服務器或客戶端對它們進行編碼的方法或建議!

PHP(process.php):

 $records = array();

 if($results = $db->query("SELECT * FROM cust_tbl")) {
     if($results->num_rows) {
         while($row = $results->fetch_object()) {
             $records[] = $row;
         }

         echo json_encode($records);

         $results->free();
     }

 }

AJAX:

function show() {
    clear();
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "process.php",
        data: "action=show",
        success: function(data) {
            $.each(data, function(index, data) {
                $('#tablebody').append('<tr>');
                $('#tablebody').append('<td>' + data.JL_JOB_DATE + '</td>');
                $('#tablebody').append('<td>' + data.JL_YR + '</td>');
                $('#tablebody').append('</tr>');
            });
        }
    });
}

如果您希望對要發送的HTML進行編碼:可以使用htmlentities()

如果您要刪除html標記並只保留文本,請使用strip_tags()

更新:

我在您的$.each注意到, $.each都有2個用於data參數。 $.each ,我通常這樣做的是:

$.each(data, function() {
    //use data.<column name>
});

除非您真的需要數據索引,否則建議您將其保留以提高可讀性。 $.each文檔可以在這里找到

另外,請嘗試一次完成全部附加操作。

$.each(data, function() {
    $('#tablebody').append( '' +
                            '<tr>' +
                                '<td>' + data.<column name> + '</td>' +
                                '<td>' + data.<column name> + '</td>' +
                            '</tr>' +
                            '');
});

按照您的方式進行操作,基本上會創建一個新行,然后將表數據添加到表的末尾,而不是專門在所需的tr中添加。

使用php strip_tags($ records);
http://www.w3schools.com/Php/func_string_strip_tags.asp

使用underscore.js

escape_.escape(string) 
Escapes a string for insertion into HTML, replacing &, <, >, ", and ' characters.

_.escape('Curly, Larry & Moe');
=> "Curly, Larry &amp; Moe"

在我的代碼中添加了功能:

$.each(data, function(index, data) {
            $('#tablebody').append('<tr>');
            $('#tablebody').append('<td>' + escape(data.JL_JOB_DATE) + '</td>');
            $('#tablebody').append('<td>' + escape(data.JL_YR) + '</td>');
            $('#tablebody').append('</tr>');
        });

暫無
暫無

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

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