【问题标题】:unicode text not displayed as expected when fetched using ajax使用 ajax 获取时未按预期显示 unicode 文本
【发布时间】:2011-09-01 18:36:33
【问题描述】:

我有一个管理模块和一个前端模块。

我有一个类别部分。

我通过 ajax 将文本框中的值发布到 php 来创建类别。 管理员和前端字符集都是 utf-8。

我读到默认情况下 ajax 使用 utf-8 编码。

当我发布数据时,它完美地保存在数据库中。

我可以在数据库中看到该 unicode 文本。

我可以在后台和前端列出时看到它。

但是

当我点击编辑时,我会使用 ajax/json 从服务器获取数据

我得到的只是?????而不是 unicode 文本。

在正常加载时显示良好。

可能是什么问题......我错过了什么?


编辑

var jax = createAjax();
jax.open("POST",path,true)  
jax.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=utf-8');
jax.onreadystatechange = afunction;

这里是php代码

$query = "select * from $box where id=$id";
if(! ($res = mysql_query($query)))die(mysql_error());
$rs = mysql_fetch_array($res,1);
$rs['status'] = 1;
header("Content-Type: text/html; charset=utf-8");
die(json_encode($rs));

我已将上述内容用于请求和响应...即使我已将 utf-8 更改为 iso-85**-1 一些默认但无效的东西。

我附上了下面的屏幕截图 在新窗口或标签中打开图片以放大查看

在上图中,您可以看到 utf 字符在列表中很好地显示,但是当使用 ajax 和 json 进行编辑时,它显示为 ????在文本框中。

这是文本在数据库中的显示方式...

【问题讨论】:

  • 如果您发布执行 ajax 调用的代码,并且发布来自服务器的 JSON 响应,这将有所帮助。
  • 可能是实体编码的问题。
  • 我已按照 Pointy 的要求通过添加文本和屏幕截图来更新问题。
  • 我正在使用 codeigniter 框架,它默认将编码设置为 utf-8。

标签: javascript ajax unicode


【解决方案1】:
SET NAMES 'utf8' COLLATE 'utf8_general_ci'

这帮助我解决了这个问题。

建立连接后执行此查询。

我得到了这个信息表单代码点火器框架,因为使用它我的代码运行良好,但是当我直接使用 mysql_query 时,我无法得到预期的结果。

如果您使用的是代码点火器,那么这是默认设置的,否则您必须包含该行。

我不接受这个作为我自己的答案,因为用户可能会发布更多原因,所以我正在等待更多的 cmets 和这个问题的答案。

无论如何它现在正在工作。

另外,请确保表格排序规则是utf8,字段也是。

【讨论】:

    【解决方案2】:

    尝试一个/两个:

    1. 在记事本中打开文件,点击保存,确保保存在 utf-8 中,而不是 Ansi。 (尤其是提供 JSON 的那个)
    2. 强制您的响应为 utf-8(对于 php:<?php header('Content-type: text/html; charset=utf-8'); ?>

    【讨论】:

    • imgur 从这里被阻止...我看不到图片。我不能再帮你了。你试过我的第一步了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多