我正在编写一个适用于使用 ISO-8859-1 的网站的 Chrome 扩展程序。只是为了提供一些背景信息,我的扩展程序所做的是通过添加更方便的帖子表单来更快地在网站的论坛上发帖。然后,写入消息的文本区域的值通过 Ajax 调用(使用 jQuery)发送。
如果消息包含 á
等字符这些字符在发布的消息中显示为 á。强制浏览器显示 UTF-8 而不是 ISO-8859-1 会使 á
正确显示。
我的理解是 Javascript 使用 UTF-8 作为其字符串,所以我的理论是,如果我在发送之前将字符串转码为 ISO-8859-1,它应该可以解决我的问题。但是,似乎没有直接的方法可以在 Javascript 中进行这种转码,而且我无法触及服务器端代码。有什么建议吗?
我尝试将创建的表单设置为使用 iso-8859-1,如下所示:
var form = document.createElement("form");
form.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";
并且:
var form = document.createElement("form");
form.encoding = "ISO-8859-1";
但这似乎不起作用。
编辑:
问题实际上在于 jQuery 是如何对消息进行 urlencoding 的(或其他方式),我通过告诉 jQuery 不要处理数据并自己处理来解决这个问题,如下面的片段所示:
function cfaqs_post_message(msg) {
var url = cfaqs_build_post_url();
msg = escape(msg).replace(/\+/g, "%2B");
$.ajax({
type: "POST",
url: url,
processData: false,
data: "message=" + msg + "&post=Preview Message",
success: function(html) {
// ...
},
dataType: "html",
contentType: "application/x-www-form-urlencoded"
});
}
最佳答案
It is my understanding that Javascript uses UTF-8 for its strings
不,不。
每个页面都有其在元标记中定义的字符集编码,正下方头部元素
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
或者
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
除此之外,每页应使用目标字符集编码 进行编辑.否则,它将无法按预期工作。
在服务器端定义其目标字符集编码是一个好主意。
Java
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
PHP
header("Content-Type: text/html; charset=UTF-8");
C#
I do not know how to...
设置每个脚本文件是否使用敏感字符(á、é、í、ó、ú 等)可能是个好主意。
<script type="text/javascript" charset="UTF-8" src="/PATH/TO/FILE.js"></script>
...
So it is my theory that if I transcode the string to ISO-8859-1 before sending it, it should solve my problem
不,不。
目标服务器可以处理 ISO-8859-1 以外的字符串.例如,无论您如何设置页面,Tomcat 都在 ISO-8859-1 中处理。因此,在服务器端,您可能必须根据您设置页面的方式设置您的请求。
Java
request.setCharacterEncoding("UTF-8")
PHP
// I do not know how to...
如果你真的想翻译目标字符集编码,TRY如下
InternetExplorer
formElement.encoding = "application/x-www-form-urlencoded; charset=ISO-8859-1";
ELSE
formElement.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";
或 您应该提供一个函数来获取每个字符使用的 Unicode 字符集中的数字表示。无论目标字符集编码如何,它都会起作用。例如,作为 Unicode 字符集的 á 是\u00E1;
alert("á without its Unicode Character Set numerical representation");
function convertToUnicodeCharacterSet(value) {
if(value == "á")
return "\u00E1";
}
alert("á Numerical representation in Unicode Character Set is: " + convertToUnicodeCharacterSet("á"));
Here你可以在行动中看到:
你可以用这个link作为指南(参见 JavaScript 转义)
添加到原始答案中我如何实现 jQuery 功能
var dataArray = $(formElement).serializeArray();
var queryString = "";
for(var i = 0; i < dataArray.length; i++) {
queryString += "&" + dataArray[i]["name"] + "+" + encodeURIComponent(dataArray[i]["value"]);
}
$.ajax({
url:"url.htm",
data:dataString,
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
success:function(response) {
// proccess response
});
});
它工作正常,没有任何头痛。
问候,
关于javascript - 如何将 Javascript 字符串转码为 ISO-8859-1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2283829/