jQuery AJAX字符编码
我目前正在编写一个法语网站。有一个日程表页面,可以使用旁边的链接加载另一天的日程表 下面是我用来做这件事的JS:jQuery AJAX字符编码,jquery,ajax,character-encoding,Jquery,Ajax,Character Encoding,我目前正在编写一个法语网站。有一个日程表页面,可以使用旁边的链接加载另一天的日程表 下面是我用来做这件事的JS: <script type="text/javascript"> function load(y) { $.get(y,function(d) { $("#replace").html(d); mod(); }); } function mod() {
<script type="text/javascript">
function load(y) {
$.get(y,function(d) {
$("#replace").html(d);
mod();
});
}
function mod() {
$("#dates a").click(function() {
y = $(this).attr("href");
load(y);
return false;
});
}
mod();
</script>
功能负载(y){
$.get(y,函数(d){
$(“#替换”).html(d);
mod();
});
}
函数mod(){
$(“#日期a”)。单击(函数(){
y=$(this.attr(“href”);
载荷(y);
返回false;
});
}
mod();
实际的AJAX工作起来很有魅力。我的问题在于对请求的响应
因为它是一个法语网站,所以有很多重音字母。我使用ISO-8859-15字符集正是出于这个原因。但是,在对我的AJAX请求的响应中,重音变成了?,因为字符编码似乎改回了UTF-8
我如何避免这种情况?我已经尝试在请求的文档顶部添加一些PHP来设置字符集:
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
但这似乎也不起作用。有什么想法吗
另外,当你们中的任何人都在这里查看时……为什么在加载新页面时,最右边的列似乎变小了,导致表格扭曲,并且
中的每个都换行到下一行
干杯UTF-8应该处理所有口音和外来字符-为什么不在您的数据源上使用它呢
编辑
[]使用您的数据
首先,一切都应该是UTF-8。我用记事本++加载了文件,转换成utf-8,并手动将字符更改为所需的重音。一旦完成,一切都会很顺利
顺便说一句,除非您的服务器被定义为php process.html文件,否则使用ajax加载的文件不会获得iso字符集。如果坚持使用iso字符集,请请求一个php文件而不是html文件,并在标题中定义字符集(而不是在文件本身中)您需要将服务器设置为使用iso-8859-15作为字符编码(添加适当的HTTP标题)。在html的主体中这样做没有帮助
我能看到这条线
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
在html的源代码处。这不应该发生。使用Live HTTP头,我看不到相应的字符集HTTP头。在打印ajax文件中的变量时,将其用于第一页和ajax服务。。放
htmlentities()
在他们周围,看看它是否有效。在一个冰岛ajax应用程序中为我工作。在ajax调用中指定内容类型解决了我在挪威网站上遇到的问题
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
timeout: 20000,
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
dataType: 'json',
success: callback
});
您还必须在服务器上指定字符集
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
我的页面也有同样的问题:
- 正常通话时表现良好
- 当通过ajax请求调用时,是否将特殊字符弄乱了
为了解决这个问题(使用php),我在源数据上使用了utf8\u encode()
或htmlentities()
。两者都有效,我在不同的项目中使用过。我不同意所有内容都必须是UTF-8,你可以使用ISO 8859使其完美工作,我做到了,请阅读我的回复
我建议使用javascript escape()方法
您可以通过如下方式获取表单值,将其用于jQuery:
var encodedString = escape($("#myFormFieldID").val());
我在西班牙门户网站的内容评论系统中工作时遇到了类似的问题。
经过数小时的搜索,最终解决了我的问题的是,在处理ajax帖子的PHP中,从utf-8解码回ISO-8859-1,而不是使用jQuery字符集,不管怎样,它似乎都使用utf-8。在PHP中有一个内置函数,utf8\u decode()
,因此我对注释字符串所做的第一件事是:
$comentario = utf8_decode($_POST['comentario']);
(然后我使用nl2br()
和htmlentities()
PHP函数来准备要用html实体而不是特殊字符存储的文本)
祝你好运平安!
Seba我一直在摆弄这个问题,发现这个解决方案适用于Firefox和safari(是的,我现在在mac上)
当收到请求时,我在此处创建了一个content type=iso-8859-1:
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1');
}
}
如果有人发现这在ie中不起作用,请告诉我。刚刚将{“type”:“GET”}
更改为{“type”:“POST”}
,并对ISO-8859-1
进行了出色的处理。对于我的PHP应用程序,解决方案是为进入$\u POST
的每个变量包含utf8解码函数
例:(服务器端)
阿布拉索斯!!!(再见!!!)
有关更多信息,请参见和我的网页在ASP方面也有类似问题。我决定:
1) 在Jquery ajax方法调用的ASP文件开头插入指令:
Response.Charset = "windows-1252"
在我的asp页面中,在没有定义字符集之前,我用ANSI编码保存了我的文件(文本编辑器为notepad++)
2) 在使用jquery ajax方法调用ASP文件的html文件中,我插入了如下所示的参数内容类型:
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
datatype: 'html',
contentType: "text/html;charset=windows-1252",
简单地说,在ASP文件中定义名为字符集的内容非常重要。奇怪的是,我发现我的jquery可以在windows-1252上运行,但不能在ISO-8859-1字符集上运行:在这种情况下,jquery ajax方法给出了一个例外。我遇到了瑞典/挪威字母显示为问号的问题,尽管指定了:
<script type="text/javascript">
function GetContent(idUser){
$.ajaxSetup({
url: 'ping.php'
});
$.ajax({
type: "POST",
url: "blablabla.php",
dataType: "text",
data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
success: function(html) {
$('#user_specified_content').html(html);
}
});
}
</script>
contentType: "application/json; charset=utf-8",
通过在字符串中添加encodeURIComponent
解决了这个问题
url: "/set_comment.do?text=" + encodeURIComponent(comment),
我也遇到过同样的问题,并尝试过几种方法。我找到了解决办法。如果您将请求头设置为“接受”,如下所示
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
dataType: 'json',
beforeSend : function(xhr) {
xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
},
success: callback
});
你会看到所有的字符看起来都是正确的
contentType: "application/json; charset=utf-8",
url: "/set_comment.do?text=" + encodeURIComponent(comment),
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
dataType: 'json',
beforeSend : function(xhr) {
xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
},
success: callback
});
mysql_set_charset('utf8',$connection);
$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));
$.ajax({
async:false,
type: "GET",
url: "data/FileName.txt",
dataType: "text",
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
success: function (data) {
alert(data);
}
});
$.ajax({
async: false,
type: 'GET',
url: 'some-url',
success: function(data, status) {
mainController.constructionStageMaster = data.records;
}
});
{
"records": [
{
"StageDesc": "Excavation, Fondation et Bases",
"Allowed": 9,
"Completed": 0,
"TotalCompleted": ""
},
{
"StageDesc": "Étanchement et Remblayage",
"Allowed": 3,
"Completed": 0,
"TotalCompleted": ""
},
{
"StageDesc": "Encadrement et revêtement mural intermédiaire",
"StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
"StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
"Allowed": 15,
"Completed": 0,
"TotalCompleted": ""
}
...
]
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>
<script>
$.ajaxSettings.mimeType="*/*; charset=ISO-8859-15";// set you charset
</script>