我目前正在编写一个法国网站。有一个计划页面,侧面的链接可用于加载另一天的计划。
这是我用来做这个的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'); ?>
但这似乎也不起作用。有什么想法吗?
此外,虽然你们任何人都在这里看...为什么加载新页面时最右边的列似乎变小了,导致表变形,<li>
中的每个<td>
换行到下一行?
干杯
答案 0 :(得分:62)
在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'); ?>
答案 1 :(得分:23)
UTF-8应该处理所有重音和外来字符 - 为什么不在数据源上使用它?
修改强>
[Archive copy of the test file.]包含您的数据
首先应该是UTF-8。我在notepad ++中加载文件,转换为utf-8并手动将字符改为重音符号。一旦完成,一切都像魅力一样。
顺便说一句,除非你的服务器被定义为php-process .html文件,否则你用ajax加载的文件都没有得到你的iso字符集。如果你坚持使用iso charset,请求php文件而不是html文件,并在标题中定义charset(不在文件本身中)答案 2 :(得分:19)
$str=iconv("windows-1250","UTF-8",$str);
最终帮助我的是什么
答案 3 :(得分:10)
您需要将服务器设置为使用ISO-8859-15作为字符编码(添加适当的HTTP标头)。在html的主体中执行它将无济于事。
我可以看到这一行
<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
在你的HTML源码。这不应该发生。使用Live HTTP标头我看不到相应的charset HTTP标头。将它用于第一页和ajax服务。
答案 4 :(得分:7)
对于我的PHP应用程序,解决方案是包含utf8_decode函数,用于$_POST
中的每个变量。
Ex :(服务器端)
if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){
$variable = htmlentities($_POST['variable']); // wrong
$variable = htmlentities( utf8_decode($_POST['variable']) ); // right
}
Abraços!!! (再见!!!)
答案 5 :(得分:7)
我强烈建议使用javascript escape()方法
你可以通过抓取像这样的表单值来使用jQuery:
var encodedString = escape($("#myFormFieldID").val());
答案 6 :(得分:6)
打印出ajax文件中的变量时。放一个
htmlentities()
在他们周围,看看它是否有效。在冰岛的ajax应用程序中为我工作。
答案 7 :(得分:4)
我遇到过类似的问题,在西班牙语门户网站的内容评论系统中工作。
什么最终解决了我的问题,经过几个小时的搜索,而不是搞乱jQuery字符集,似乎使用utf-8无论如何,它是从处理的PHP中的utf-8解码回ISO-8859-1 ajax POST。在PHP中有一个内置函数utf8_decode()
,所以我对注释字符串做的第一件事就是:
$comentario = utf8_decode($_POST['comentario']);
(然后我使用nl2br()
和htmlentities()
PHP函数来准备要用html实体而不是特殊字符存储的文本。
祝你好运和平到处都是! 西巴
答案 8 :(得分:3)
我一直在解决这个问题,并发现这个解决方案适用于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');
}
}
如果有人发现这不起作用,请告诉我。
答案 9 :(得分:3)
我的网页上有一个与ASP类似的问题。我已经解决了这个问题:
1)在Jquery ajax方法调用的ASP文件的开头插入指令:
Response.Charset = "windows-1252"
在我的asp页面之前没有定义charset并且我用ANSI编码保存了我的文件(用文本编辑器作为记事本++)
2)在使用jquery ajax方法调用ASP文件的html文件中,我插入了您在下面看到的参数content-type:
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
datatype: 'html',
contentType: "text/html;charset=windows-1252",
简而言之,在您的ASP文件中定义称为charset非常重要。奇怪的是,我看到我的jquery与windows-1252一起工作,但不适用于ISO-8859-1 charset:在这种情况下,jquery ajax方法会给出异常。
答案 10 :(得分:3)
我有一个问题,瑞典语/挪威语字母显示为问号,尽管已指定:
contentType: "application/json; charset=utf-8",
通过在字符串中添加encodeURIComponent
来解决这个问题。
url: "/set_comment.do?text=" + encodeURIComponent(comment),
答案 11 :(得分:2)
我尝试了许多建议,用德语特殊字符(ä,ö,ü)阅读文本文件。最后:
$.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,,但如果您“另存为”并使用旁边的保管箱,则可以更改它保存按钮或使用更好的编辑器开始。
答案 12 :(得分:1)
我不同意一切都必须是UTF-8,你可以使它与ISO 8859完美配合,我做了,请在这里阅读我的回复。
答案 13 :(得分:1)
<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页面获取内容的脚本。
当我收到成功数据时,我的口音不会出现。
我找到了一个非常好的工作解决方案来获取来自.success
函数
在我的blabla页面上。我这样做是为了解决我的问题:
我在我的php文件中使用utf8_encode(place your data here)
。请参阅下面的操作:
while( $row = sqlsrv_fetch_array($recordset) )
{
<option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>
}
答案 14 :(得分:0)
jQuery默认情况下采用UTF-8,要更改此默认值,请执行以下操作:
<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>
这对我来说很好!...;))...
答案 15 :(得分:0)
我有类似的问题。我有带有法语文本的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": ""
}
...
]
}
请注意,在上面的示例数据中,第3个元素,我在文本中放置了正确的é
和不正确的ê
法语重音字母。
对于您的信息,似乎有一些使用ISO-8859-1
字符编码的Eclipse项目的全局配置。在您的情况下,它可能是不同的编码。
在检查上述解决方案并玩弄项目之后,这就解决了我的问题:
ISO-8859-1
现在,在我的情况下,我没有在Ajax调用中指定任何编码选项,它工作正常。另外,如果我用json数据更改文本文件的编码,它仍然可以正常工作。
塔雷克
答案 16 :(得分:0)
我试图使用$ .ajax读取本地json / text文件,并且编码最初没有用。我通过将json文件保存为UTF-8编码来实现它。 这可以通过Windows记事本简单地完成..使用“另存为”,然后在文件名下面,您可以将编码设置为UTF-8。
祝你好运!答案 17 :(得分:0)
如果您正在使用CodeIgniter,您可以通过在加载任何视图之前将以下代码添加到Controller来解决此问题(假设您已在配置上正确设置charset
。如果没有,请放置charset=whateveryouwant
。
$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));
我这样做的方法是将该行添加到MY_Controller的构造函数中,这是我所有控制器的超类,这样我就确保在任何地方都没有编码问题。
顺便说一下,这不会影响JSON返回(以UTF-8编码)。
答案 18 :(得分:0)
我提出这个问题与提问者的问题完全相同。这里的答案非常有说服力,我几乎尝试了每一个建议的答案。这里没有任何答案对我有用 - 我的问题可能略有不同。这似乎是许多人的情况。在结束答案之前我做了很多尝试。
所以现在我正在添加已经很长的答案列表,我自己的解决方案解决了我的编码问题。
我做了两件事。在数据库连接脚本中,我添加了:
mysql_set_charset('utf8',$connection);
除此之外:
重点是所有内容必须具有相同的编码。在创建新的php文件时,对于脚本来说仅仅更改脚本中的编码是不够的 - 文件本身必须正确编码。
答案 19 :(得分:0)
我遇到了同样的问题并尝试了几种方法。我找到了解决方案。如果您为“接受”设置请求标头,如下所示;
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
dataType: 'json',
beforeSend : function(xhr) {
xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
},
success: callback
});
您将看到所有字符看起来都是正确的
答案 20 :(得分:0)
如果整个应用程序使用的是ISO-8859-1,您可以修改jquery.js替换encodeURIComponent
的所有出现escape
(在当前的jquery脚本中有2次要替换 - 1.5.1)
有关详细信息,请参阅encodeUIComponent和escape
答案 21 :(得分:0)
刚刚将{"type":"GET"}
更改为{"type":"POST"}
,就像ISO-8859-1
答案 22 :(得分:0)
我的网页遇到了同样的问题:
为了解决这个问题(使用php),我在源数据上使用了utf8_encode()
或htmlentities()
。两者都有效,我在不同的项目中使用它们。