假设我将一个重音字符(例如ASCII 233)键入如下形式:
然后我用这段代码发帖。关键点,据我所知:使用ASCII> URL编码是不可行的。 127,所以你必须诱导不同的内容类型。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<script type="text/javascript" src="../js/third_party/jquery.js"></script>
<script>
$(document).ready(function(){
$('#but').click(function(){
var fd = new FormData();
fd.append( 'params', $('#inp').val());
$.ajax({
url: 'http://my-server-address-here',
data: fd,
dataType: 'json',
processData: false,
contentType: false,
type: 'POST',
success: function(data){
alert(data);
}
});
});
});
</script>
</head>
<input id="inp"></input>
<button id="but">Submit</button>
</html>
问题是,Chrome似乎仍然会破坏角色,如图所示。这是在它甚至到达服务器端脚本之前,但是从那里输出它会显示同样的问题。
我们输出此类型的数据(例如服务器到浏览器)一直没有任何问题或特殊逻辑,因此,我认为必须能够让我的'法语e'显示服务器没有任何特殊的翻译或转换,除了正确配置浏览器和请求之外,我认为我没有做到。任何建议表示赞赏。
答案 0 :(得分:0)
我相信你的例子很好用。您已经告诉浏览器将此页面视为<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
标记中的UTF-8,这意味着它将以UTF-8的形式提交表单数据。百分比编码与此无关,因为您将字符作为http正文的一部分发送(作为multipart / form-data)。
您在Chrome的开发人员工具中看到的字符是开发工具将单字符é视为两个单字节字符而不是两字节UTF-8字符的结果。您的服务器应该正确地将两个字节读作单个字符,而不是像chrome dev工具那样的两个字符。
(我刚刚使用Node.js服务器测试了你的例子,服务器正确地将表单主体解释为UTF-8,返回“é”作为输入。)
答案 1 :(得分:0)
这很好用,比你的代码更简单
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<script type="text/javascript" src="http://code.jquery.com/jquery-git.js"></script>
<script>
$(function() {
$("#but").click(function(){
var $data = { "params":$("#inp").val()};
$.ajax({
url: "dump.php",
data: $data,
type: "POST",
success: function(data){
$("#result").html(data);
}
});
});
});
</script>
</head>
<input id="inp" value="Français - Wikipédia"></input>
<button id="but">Submit</button>
<div id="result"></div>
</html>