首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向JS/PHP脚本添加UTF-8支持

向JS/PHP脚本添加UTF-8支持
EN

Stack Overflow用户
提问于 2019-11-19 05:36:52
回答 5查看 1.8K关注 0票数 11

我正在开发一个使用JavaScipt通过AJAX向PHP脚本发送数据的页面。问题是,如果输入不是基于拉丁语的语言,我就会在MySQL表中存储胡言乱语。拉丁字母很好用。

该页面本身能够呈现UTF-8字符,如果它们在页面加载时提供的数据中,这是我很难理解的帖子。

اختبار

还有拯救。请参阅浏览器开发工具中的Network请求。

该职位是通过以下JS功能设置的

代码语言:javascript
运行
复制
function createEmptyStack(stackTitle) {
    return $.ajax({
        type:'POST',
        url:'ajax.php',
        data: {
            "do": 'createEmptyStack',
            newTitle: stackTitle
        },
        dataType: "json"
    });
}

这是我的PHP代码。

代码语言:javascript
运行
复制
header('Content-Type: text/html; charset=utf-8');

$newTitle = trim($_POST['newTitle']);

$db->query("
INSERT INTO t1(project_id, label) 
VALUES (".$_SESSION['project_id'].", '".$newTitle."')");

当我检查页面上的编码时,像这样:

代码语言:javascript
运行
复制
mb_detect_encoding($_POST['newTitle'], "auto");

我得到的结果是:UTF-8

我还尝试了以下标题:

代码语言:javascript
运行
复制
header("Content-type: application/json; charset=utf-8");

数据应该传递的MySQL表排序规则被设置为MySQL

我有另一个页面,它有一个表单,用户可以填充相同的表,并且它可以很好地处理任何语言。当我检查另一个页面为什么能够成功地将类似的数据插入到db时,我看到下面的insert查询:

代码语言:javascript
运行
复制
mysql_query("SET NAMES utf8");

我试图在我的查询上加上同样的行,认为这些数据看起来仍然是胡说八道。我还尝试了以下几种选择:

代码语言:javascript
运行
复制
 mysql_query("SET CHARACTER SET utf8 ");

代码语言:javascript
运行
复制
mysql_set_charset('utf8', $db);

...but无效。我被踩了。需要帮忙把它弄清楚。

环境:

PHP 5.6.40 (Cgi) MySQL 5.6.45

更新

我做了更多的测试。

我在阿拉伯语-هذااختبار中使用了一个短语“这是一个测试”。

ajax.php代码似乎工作正常。在db insert后,它返回UTF-8编码值,该值看起来类似于:"\u0647\u0630\u0627 \u0627\u062a\u062a\u0628\u0627\u0631“,而编码设置为:”UTF-8“,但我的db表中插入的数据显示为:‡°N§§§N§O.

那么,为什么我不跳到将我的db表转换成不同的排序规则呢?原因有两个:它几乎有.5 mil记录,当我转到另一个执行非常类似插入的页面时,它实际上正常工作。

原来我的另一个页面是在插入数据时使用ASCII编码。所以,这是很自然的,我试图在ajax.php上进行ASCII。我用空白数据结束的问题。我现在很困惑..。

谢谢

修复:基于一些线索,我最终重写了这个页面的所有函数到PDO,并且它工作了!

EN

Stack Overflow用户

发布于 2019-11-19 05:55:07

如果您的数据库是latin1,它将将unicode字符存储为多字节字符.如果它是基于utf-8的,它仍然会存储多个字符,但显示的方式更“明智”。

如果您的ر字符表示为XYZ (3个字节),那么当您检索XYZ时,浏览器将它们重新组合成一个可见的ر。

但是,如果您的数据库是utf-8,那么它将进一步对每个组件进行编码,以便您最终“可靠地”看到XYZ。假设X被表示为x1,x2,Y只是y,Z是z1,z2,z3,所以没有看到存储为XYZ的ر,现在您看到的是x1x2yz1z2z3,它显示为XYZ。

尝试将您的数据库转换为latin1,以至少证实我的理论。谢谢。

编辑:

不需要使用utf8 js库。确保页面的字符编码为utf8:

代码语言:javascript
运行
复制
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

当您发布数据时,可以在发送XHR请求之前使用encodeURIComponent对其进行编码。我不确定jQuery风格的$.ajax是否已经完成了编码。

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58927296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档