2015-05-25 20 views
6

Tôi gửi đối tượng JSON chuyển đổi thành chuỗi đến một hành động wordpressLàm thế nào để ngăn chặn jQuery ajax thêm các dấu gạch chéo vào chuỗi JSON?

console.log(JSON.stringify(alloptions)); 

$.ajax({ 
    type: "post", 
    dataType: "json", 
    url: ajaxurl, 
    processData: false, 
    data: { 
     'action': 'create_preset', 
     'preset': JSON.stringify(alloptions) 
    }, 
    success: function(response) { 

     console.log(response); 

    } 
}); 

console log của đối tượng chuyển đổi thành chuỗi trước khi gửi qua ajax là này

http://prntscr.com/7990ro

nên chuỗi được xử lý một cách chính xác,

nhưng ở phía bên kia nó xuất hiện với dấu gạch chéo

function _create_preset(){ 

    if(!is_admin() && !isset($_POST['preset'])) return; 

    print_r($_POST['preset']); 

} 

add_action("wp_ajax_create_preset", "_create_preset"); 

cho

{\"get_presets\":\"eedewd\",\"site_width\":\"1400px\",\"layout_type\":... 

Tôi biết tôi có thể sử dụng

stripslashes($_POST['preset']) 

để làm sạch nó lên nhưng đó là những gì tôi đang cố gắng để tránh. Tôi cần chuỗi JSON được gửi đến hành động vì nó là trước ajax, không có dấu gạch chéo.

bất kỳ trợ giúp nào được đánh giá cao!

và báo giá ảo thuật không phải là trên

http://prntscr.com/7996a9

* CẬP NHẬT VÀ GIẢI PHÁP

Jesse đóng đinh nó và WP đã gây ra rắc rối. Kể từ khi wp_unslash() đang trên đường để sửa lỗi này trong 5,0 https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/issues/172 tôi thêm này để mã của tôi

global $wp_version; 
$new_preset_options = $_POST['preset']; 

if (version_compare($wp_version, '5.0', '<')) { 

    $new_preset_content = wp_unslash($new_preset_options); 

}else{ 

    $new_preset_content = $new_preset_options ; 
} 
+0

brrrrrrrr, có vẻ như dấu ngoặc kép ma thuật: http://php.net/manual/en/security.magicquotes.what.php – jeroen

+0

@jeroen no is, http://prntscr.com/7996a9 – Benn

+0

Dường như bạn đúng, nhưng bạn có thể xác nhận rằng kiểm tra giá trị của 'get_magic_quotes_gpc()'? – jeroen

Trả lời

8

WordPress đã quyết định một thời gian dài trước đây để tự động add chém tới tất cả các biến đầu vào toàn cầu ($ _POST, v.v.) Chúng truyền nó thông qua hàm wp_slash() bên trong. Quan chức này đề nghị cách để loại bỏ các dấu gạch chéo là sử dụng họ cung cấp wp_unslash:

wp_unslash($_POST['preset']); 

Here is the codex reference.

** Lưu ý: Có vẻ như might be getting fixed in version 5.0 này, nơi họ sẽ được làm wp_unslash cho bạn khi bạn yêu cầu giá trị từ các biến đầu vào toàn cục.

+0

Đó là nó, chỉ cần thử nghiệm trên bình thường php ajax không WP và chuỗi của tôi đi ra như mong đợi. http://prntscr.com/799kl6 – Benn

+0

Cảm ơn, nó rất hữu ích. –

+0

Điều này làm việc cho tôi !! Cảm ơn – JWarker

Các vấn đề liên quan