jQuery的AJAX字符编码
我目前正在编写一个法文网站。 有一个时间表页面,可以使用侧面链接加载另一天的日程安排。
这里是我用来做到这一点的JS:
<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>
实际的AJAX就像一个魅力。 我的问题在于对请求的回应。
因为是法文网站,所以有很多重音字母。 我使用ISO-8859-15字符集就是这个原因。 但是,在对我的AJAX请求的响应中,重音符号变成了'',因为字符编码似乎被改回到UTF-8。
我如何避免这种情况? 我已经尝试在请求的文档的顶部添加一些PHP来设置字符集:
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
但是,这似乎也没有工作。 有什么想法吗?
另外,虽然你们任何一个在这里看…为什么最右边的一列似乎变小了,当一个新的页面被加载,导致表扭曲和<td>
每个<li>
包装到下一行?
干杯
UTF-8应该处理所有的口音和外国人的字符 – 为什么不使用它在您的数据源?
编辑
[ 存档testing文件的副本。 ]与您的数据
一切应该是UTF-8首先。 我用notepad ++加载文件,转换为utf-8,手动改变字符的重音是需要的。 一旦完成一切工作就像一个魅力。
顺便说一句,除非你的服务器被定义为php-process .html文件,你用ajax加载的文件没有得到你的iso字符集。 如果你坚持使用iso字符集,请求一个php文件而不是html文件,并且在头文件中定义字符集(而不是文件本身)
在AJAX调用中指定内容types解决了我在挪威站点上的问题。
$.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'); ?>
$str=iconv("windows-1250","UTF-8",$str);
最终是什么帮了我的忙
您需要设置您的服务器使用ISO-8859-15作为字符编码(添加适当的HTTP标头)。 这样做在HTML的身体将无济于事。
我可以看到这一行
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
在你的html的源代码。 这不应该发生。 使用Live HTTP标题我看不到适当的字符集HTTP标题。 将它用于第一页和ajax服务。
我会强烈build议使用JavaScript的escape()方法
你可以通过抓取一个表单值来像这样使用jQuery:
var encodedString = escape($("#myFormFieldID").val());
对于我的PHP应用程序来说,解决scheme是包含$_POST
每个variables的utf8_decode函数。
例如:(服务器端)
if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){ $variable = htmlentities($_POST['variable']); // wrong $variable = htmlentities( utf8_decode($_POST['variable']) ); // right }
Abraços! (再见!!!)
在ajax文件中打印出variables时。 放一个
htmlentities()
在他们周围,看看它是否有效。 在冰岛ajax应用程序中为我工作。
我在西class牙门户网站的内容评论系统中遇到了类似的问题。 终于解决了我的问题,经过几个小时的search,而不是搞乱jQuery charset,似乎使用utf-8,无论如何,它是从UTF-8解码回到ISO-8859-1在处理的PHP ajax POST。 在PHP中有一个内置函数utf8_decode()
,所以我对注释string做的第一件事情是:
$comentario = utf8_decode($_POST['comentario']);
(然后我使用nl2br()
和htmlentities()
PHP函数来准备要用html实体而不是特殊字符存储的文本)
祝好运和平! 西巴
我一直在摆弄这个问题,发现这个解决scheme适用于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'); } }
请告诉我,如果有人发现这不起作用,即。
我的页面有一个与ASP类似的问题。 我已经解决了:
1)在由jquery ajax方法调用的ASP文件的开头插入指令:
Response.Charset = "windows-1252"
在我的asp页面没有定义字符集之前,我用ANSI编码保存了我的文件(用文本编辑器作为notepad ++)
2)在用jquery ajax方法调用ASP文件的html文件中,我插入了参数content-type,如下所示:
$.ajax({ data: parameters, type: "POST", url: ajax_url, datatype: 'html', contentType: "text/html;charset=windows-1252",
简而言之,在称为charset的ASP文件中定义是非常重要的。 奇怪的是,我看到我的jQuery与Windows-1252工作,但不符合ISO-8859-1字符集:在这种情况下,jQuery的ajax方法给出一个例外。
瑞典/挪威的信件出现了一个问题,尽pipe已经指出:
contentType: "application/json; charset=utf-8",
这是通过将encodeURIComponent
添加到string来解决的。
url: "/set_comment.do?text=" + encodeURIComponent(comment),
我尝试了很多build议阅读与德国特殊字符(ä,ö,ü)的文本文件。 到底:
$.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); } });
让我读取特殊字符,但只有在我明确保存UTF-8格式的FileName.txt后 。 在Windows编辑器中保存文本文件的标准格式是ANSI,而不是UTF-8,但是如果使用“另存为”并使用保存button旁边的保存框或使用更好的编辑器,则可以更改它。
我不同意一切都必须是UTF-8,你可以使它与ISO 8859完美的工作,我做了,请在这里阅读我的回应。
我的回复在stackoverflow
<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>
这是我从blabla.php页面获取内容的脚本。
当我收到成功的数据时,我的口音不会出现。
我已经find了一个超级好的工作解决scheme,用于从.success
函数获取获取数据的重音数据
在我的blabla页面上。 我这样做是为了解决我的问题:
我使用utf8_encode(place your data here)
在我的PHP文件。 请参阅下面的操作:
while( $row = sqlsrv_fetch_array($recordset) ) { <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option> }
如果整个应用程序正在使用ISO-8859-1,则可以通过escape
来修改jquery.js,以replace所有出现的encodeURIComponent
(在当前的jquery脚本中有两个replace项 – 1.5.1)
请参阅encodeUIComponent并转义以获取更多信息
我面临同样的问题,并尝试了几种方法。 我find了解决办法。 如果您为下面的“接受”设置请求标头;
$.ajax({ data: parameters, type: "POST", url: ajax_url, dataType: 'json', beforeSend : function(xhr) { xhr.setRequestHeader('Accept', "text/html; charset=utf-8"); }, success: callback });
你会看到所有的angular色似乎都是正确的
我提出了和提问者完全相同的问题。 这里的答案是非常明显的,我几乎尝试了每一个build议的答案。 这里没有任何答案对我有用 – 我的问题可能有一点点差异。 而这似乎是很多的情况。 在结束答案之前,我尝试了很多。
所以现在我join已经很长的答案列表,我自己的解决scheme解决了我的编码问题。
我做了两件事。 在数据库连接脚本中,我添加了:
mysql_set_charset('utf8',$connection);
除此之外:
- 我将所有文件的编码更改为UTF-8
关键是所有东西都必须是相同的编码。 而当创build新的php文件,脚本是不够的,只是改变脚本中的编码 – 文件本身必须正确编码。
只是将{"type":"GET"}
更改为{"type":"POST"}
,并像ISO-8859-1
我遇到了与以下页面相同的问题:
- 正常调用时显示正常
- 通过ajax请求调用特殊字符
为了解决这个问题(使用php),我在源数据上使用了utf8_encode()
或htmlentities()
。 两者都有效,我已经在不同的项目中使用过它们。
如果你正在使用CodeIgniter,你可以在加载任何视图之前把下面的代码添加到你的控制器来解决这个问题(假设你已经在你的configuration文件中正确地设置了charset
集,如果没有,只需把charset=whateveryouwant
。
$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));
我这样做的方式是将该行添加到MY_Controller的构造函数中,这是我所有控制器的超类,这样我就可以确保在任何地方都没有编码问题。
顺便说一下,这不会影响JSON返回值(以UTF-8编码)。
我曾尝试读取使用$ .ajax本地JSON /文本文件,编码不起作用。我得到它通过保存为UTF-8编码的JSON文件工作。 这可以通过简单的Windows记事本来完成。使用“另存为”,然后在文件名下方可以将编码设置为UTF-8。
祝你好运!
我有类似的问题。 我有带有法文文本的JSON数据的文本文件。 总是有问题显示一些字符。 就我而言,JavaScript程序使用Ajax来检索json文本文件,如下所示:
$.ajax({ async: false, type: 'GET', url: 'some-url', success: function(data, status) { mainController.constructionStageMaster = data.records; } });
返回的数据总是有不正确的重音法文字母。
JSON文本如下所示:
{ "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": "" } ... ] }
注意在上面的示例数据中,第三个元素,我把正确的文字和不正确的法文重音字母。
对于您的信息,似乎有一些使用ISO-8859-1
字符编码的Eclipse项目的全局configuration。 在你的情况下,它可能是不同的编码。
在检查了上面的解决scheme并玩了项目之后,这就解决了我的问题:
- find正确显示法文文本的文本来源
- 复制文字
- 转到Eclipse,打开包含数据的文本文件
- 在资源pipe理器中右键单击该文件,打开属性,然后将编码更改为
ISO-8859-1
- 修正文本,使其正确显示。 使用复制/粘贴或键盘
- 您可能必须使用键盘上的箭头键(左/右)来确保没有隐藏的元凶字母,这些字母会在有趣的形状上显示在HTML上。 删除这样的隐藏信件
- 保存文件
现在,在我的情况下,我没有在Ajax调用中指定任何编码选项,它工作正常。 另外,如果我用json数据更改文本文件的编码,它仍然可以正常工作。
塔里克