当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《向JS/PHP脚本添加UTF-8支持》经验,为你挑选了1个好方法。

我正在使用JavaScipt通过AJAX POST将数据发送到PHP脚本的页面上工作。问题是,如果输入的语言不是基于拉丁语的,我最终会在MySQL表中存储乱码。拉丁字母效果很好。

页面本身能够呈现UTF-8字符,如果它们位于页面加载时提供的数据中,这就是我要努力解决的问题。

??????

并保存。请参阅浏览器开发工具中的网络POST请求。

该帖子是通过以下JS函数制作的

function createEmptyStack(stackTitle) {
    return $.ajax({
        type:'POST',
        url:'ajax.php',
        data: {
            "do": 'createEmptyStack',
            newTitle: stackTitle
        },
        dataType: "json"
    });
}

这是我的PHP代码。

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."')");

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

mb_detect_encoding($_POST['newTitle'], "auto");

我得到结果:UTF-8

我还尝试了以下标头:

header("Content-type: application/json; charset=utf-8");

应该将数据存放在的MySQL表排序规则设置为utf8_general_ci

我还有另一个页面,该页面具有一种形式,用户可以在其中填充相同的表格,并且可以与任何语言完美配合。当我在另一页上查看为什么它能够将相似的数据成功插入db时,我看到以下上面的插入查询:

mysql_query("SET NAMES utf8");

我尝试在查询上方添加同一行,以使数据看起来仍然很乱。我还尝试了以下几种替代方法:

 mysql_query("SET CHARACTER SET utf8 ");

mysql_set_charset('utf8', $db);

...但无济于事。我被踩了。需要帮助弄清楚它。

环境:

PHP 5.6.40(cgi-fcgi)

MySQL 5.6.45


更新

我进行了更多测试。

我用阿拉伯语短语“这是测试”-??? ??????

看来ajax.php代码可以正常工作。db插入后,它返回UTF-8编码的值,如下所示:“ \ u0647 \ u0630 \ u0627 \ u0627 \ u062e \ u062a \ u0628 \ u0627 \ u0631”,并且编码设置为:“ UTF-8”,但是在我的数据库表中插入的数据显示为:هذااختبار

那么,为什么不跳到将数据库表转换为其他排序规则呢?有几个原因:它有将近0.5百万的记录,当我转到执行与INSERT非常相似的另一页时,它实际上可以正常工作。

原来我的另一页在插入数据时正在使用ASCII编码。因此,我尝试在ajax.php上转换为ASCII是很自然的。我最终遇到的问题是空白数据。我现在很困惑

谢谢


修正:根据一些线索,我最终将此页面的所有功能重写为PDO,它起作用了!



1> Rick James..:

المراكز是Mojibake,或者可能是“双重编码”,用于??????? -请SELECT col, hex(col) ...查看以下哪个:

Mojibake:D8A7D984D985D8B1D8A7D983D8B2
双重编码:C398C2A7C399E2809EC399E280A6C398C2B1C398C2A7C399C692C398C2B2

如果Mojibake:

要存储的字节需要UTF-8编码。解决这个问题。

插入和选择文本时的连接需要指定utf8或utf8mb4。解决这个问题。

该列需要声明为CHARACTER SET utf8(或utf8mb4)。解决这个问题。

HTML应该以开头

如果是双重编码:这是由于从latin1(或任何其他形式)转换为utf8,然后将这些字节视为latin1并重复转换而引起的。

更多讨论:

UTF-8字符有问题;我看到的不是我存储的

千万不能使用mysql_*的PHP接口; 切换到mysqli_*或PDO接口。 mysql_*已在PHP 5.7中删除。

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有