san*_*nta 11 javascript php mysql ajax utf-8
我正在使用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"
});
}
Run Code Online (Sandbox Code Playgroud)
这是我的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."')");
Run Code Online (Sandbox Code Playgroud)
当我像这样检查页面上的编码时:
mb_detect_encoding($_POST['newTitle'], "auto");
Run Code Online (Sandbox Code Playgroud)
我得到结果:UTF-8
我还尝试了以下标头:
header("Content-type: application/json; charset=utf-8");
Run Code Online (Sandbox Code Playgroud)
应该将数据存放在的MySQL表排序规则设置为utf8_general_ci
我还有另一个页面,该页面具有一种形式,用户可以在其中填充相同的表格,并且可以与任何语言完美配合。当我在另一页上查看为什么它能够将相似的数据成功插入db时,我看到以下上面的插入查询:
mysql_query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)
我尝试在查询上方添加同一行,以使数据看起来仍然很乱。我还尝试了以下几种替代方法:
mysql_query("SET CHARACTER SET utf8 ");
Run Code Online (Sandbox Code Playgroud)
和
mysql_set_charset('utf8', $db);
Run Code Online (Sandbox Code Playgroud)
...但无济于事。我被踩了。需要帮助弄清楚它。
环境:
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,它起作用了!
المراكز是Mojibake,或者可能是“双重编码”,用于??????? -请SELECT col, hex(col) ...查看以下哪个:
Mojibake:D8A7D984D985D8B1D8A7D983D8B2
双重编码:C398C2A7C399E2809EC399E280A6C398C2B1C398C2A7C399C692C398C2B2
如果Mojibake:
<meta charset=UTF-8>。如果是双重编码:这是由于从latin1(或任何其他形式)转换为utf8,然后将这些字节视为latin1并重复转换而引起的。
更多讨论:
千万不能使用mysql_*的PHP接口; 切换到mysqli_*或PDO接口。 mysql_*已在PHP 5.7中删除。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |