jQuery如何返回未编码的值?编码解码及AJAX传参问题咨询
解决AJAX发送HTML实体编码属性值的编码异常问题
嘿,我懂你遇到的麻烦了——从img标签的game属性里拿到的字符串带了HTML实体(’),直接用AJAX发去PHP服务器后就出现了编码异常对吧?这是因为’是HTML转义后的实体,浏览器不会自动帮你解析成真正的单引号,咱们一步步来搞定它:
先在前端解码HTML实体
你用$(this).attr('game')取到的是原始的实体字符串(也就是Hellblade: Senua’s Sacrifice),并没有被解析成正常的单引号’。可以用个简单的DOM技巧来解码:$('#pcs').click(function(){ if($(this).attr('src') == "xxx.jpg" ) { $(this).fadeOut(100, function() { var cookie = "dummy"; var gameEncoded = $(this).attr('game'); // 创建临时div解码HTML实体 var tempDiv = $('<div/>').html(gameEncoded); var gameDecoded = tempDiv.text(); $.ajax({ url: "http://example/notif_games.php", type: "POST", data: ({'cook_':'cookie', 'game_': gameDecoded}), }); }); } });这里用jQuery创建了一个临时div,把实体字符串塞到它的innerHTML里,再取text()就能得到解码后的正常文本
Hellblade: Senua’s Sacrifice了。确保AJAX请求的编码规范
为了避免UTF-8编码的字符串在传输中出问题,可以给AJAX请求显式指定contentType:$.ajax({ url: "http://example/notif_games.php", type: "POST", contentType: "application/x-www-form-urlencoded; charset=UTF-8", data: ({'cook_':'cookie', 'game_': gameDecoded}), });这样jQuery会以UTF-8编码发送数据,和服务器端的编码保持一致,减少乱码概率。
PHP端做好编码接收
在你的PHP脚本开头,先设置正确的编码头,确保服务器能正确解析POST过来的UTF-8数据:header('Content-Type: text/html; charset=UTF-8'); $game = $_POST['game_']; // 可以打印出来验证是否正常 echo $game;这样你就能拿到正常的、没有编码异常的游戏名称了。
另外提一句,纯JS的decodeURIComponent只处理URI编码,不处理HTML实体,所以还是DOM解码的方法最靠谱。
内容的提问来源于stack exchange,提问作者lk8a_2m
相关产品推荐
相关产品推荐

