我无法理解为什么我无法从服务器答案中获得正确的ISO-8859-1字符。由于这是遗留代码的工作,我几乎无法改变页面上的字符集编码。
我使用JQuery调用
$.post("server-side-code", {t:ctext, i:ioff, sid:sessionid},
function(data, status) {
$('#chk').append(data);
});
发布使用javascript创建的textarea值:
<form accept-charset='ISO-8859-1' method='post'>
<textarea cols='40' rows='8' id='commento'></textarea><br>
<input type='button' value='invia' id='submit'></form>
处理请求的服务器端脚本在最顶层声明:
text/html; charset=ISO-8859-1
所以,老实说,我无法弄清楚我应该在编码方面声明什么。尽管如此,当将服务器答案放在HTML元素中时,重音字符“àèéìòù”会反弹为:“ÃÃÃÃÔÃÃÓÔÓ。
源保存为ascii。尝试执行此操作以对要发布的变量进行基本的Html编码无法解决:
ctext = escapeHTML(ctext);
function escapeHTML (str)
{
var div = document.createElement('div');
var text = document.createTextNode(str);
div.appendChild(text);
return div.innerHTML;
};
有些想法?
谢谢!
答案 0 :(得分:5)
我现在有更好的解决方案。发布和完成工作都很完美。 我正在为tomcat工作,他默认处理ISO 8859的东西。
网页属性:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
头部网页的字符集。
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
现在,我的所有参数都使用转义函数进行转义,之前我提供了此解决方案。
(function($) {$.fn.escape = function() {
return escape(this.val());};})(jQuery);
现在,在发送ajax请求时,我将contentType设置为:
contentType : "application/x-www-form-urlencoded; charset=iso-8859-1"
最后,当在servlet或任何接收器上接收参数时,我会使用此参数获得解码参数。
public String getHttpParameter(String name) throws Exception {
String value = this.getHttpRequest().getParameter(name);
return value == null || value.isEmpty() ? value : URLDecoder.decode(value,"ISO-8859-1");
}
POST和GET在IE 7和8,SAFARI,CHROME和FIREFOX中完美运行。
答案 1 :(得分:2)
我在javascript中使用了以下内容
escape($("#some_id").val())
以及PHP中的以下内容
urldecode($var)
它对我有用。
答案 2 :(得分:1)
不确定这是否会破坏您的情况,但accept-charset
支持得非常差,您甚至可能都不会使用它。它是页面编码,可以控制发送回服务器的内容。
如果查看服务器上保存的文件以查看其中的数据是否良好,这将非常有用。这至少可以确定交易的客户 - >服务器部分是否有效。
答案 3 :(得分:1)
请尝试在javascript中使用escape(),在php文件中使用urldecode()
它会起作用。
答案 4 :(得分:0)
据我所知,jQuery使用调用AJAX方法的网页编码来解释收到的数据。您是否正在使用页面的正确编码?如果是,那么很可能错误在于服务器代码。尝试以编程方式(在Web浏览器之外)调用AJAX处理程序以查看它返回的内容。
答案 5 :(得分:0)
一般资料: http://www.w3.org/International/O-HTTP-charset
尝试使用php中的utf8_decode()将utf-8字符串与转换和传出数据进行转换。
答案 6 :(得分:0)
我的所有页面都是ISO-8859-1,我的回复也是8859,但是jquery ajax吓坏了我。我的解决方案是使用此包装原始的$ .ajax功能。完美地用于GET请求,我将很快发布POST请求的解决方案。
电话:
$.myrequest({
url: "/myapp/myurl",
params: {
key1: $("#myinput").escape()
}
});
转义函数的来源
(function($) {
$.fn.escape = function() {
return escape(this.val());
};})(jQuery);
myrequest功能的来源
(function($) {
$.request = function(settings) {
/**
* generates a string that will be passed as
* data instead an object, but we have the capability
* of pass an object but in another variable called param
*/
function _parseParameters(settings) {
var data = "";
for (var param in settings.params) {
data += param + "=" + settings.params[param] + "&";
}
settings.data = data;
}
_parseParameters(settings);
$.ajax(settings);
}})(jQuery);
答案 7 :(得分:0)
我正在寻找类似问题的高低(使用AJAX的Windows-1250请求)。我找到了一个解决方案并发布在这里: How can be request variables encoded by encodeURIComponent with ISO-8859-1 charset and not utf-8?
答案 8 :(得分:0)
也许您忘记在服务器端声明contentType,然后将其指定为UTF-8,在这种情况下,contentType为null,服务器不知道它处理的是哪种数据。将contentType声明为UTF-8后,服务器就能够了解正在使用哪种数据。将contentType声明为UTF-8并不是正确的解决方案,尽管它有所帮助。 Rodrigo提供的答案可能是解决您问题的最佳方案。