【发布时间】:2026-01-06 06:50:01
【问题描述】:
首先,我的数据库编码是utf-8。
我必须通过POST 方法将字符串Fußball 发送到index.php。当我使用带有action="index.php" 的HTML 表单发送它时,它以Fu%DFball 发送并正确返回它,我在php 文件上使用htmlentities()。它工作得很好。当我尝试使用 jQuery/AJAX 发送它时,问题就开始了。
$("#Form").submit(function() {
$.ajax({
type: "POST",
dataType : "text",
url: "index.php", //Does the validation
data: $("#Form").serialize(),
success: function(data) {
alert(data)
},
});
return false;
});
它以Fu%C3%9Fball 发送并以Fuà 返回,我尝试了一切来解码它或以不同的方式发送它。以下是在各种情况下返回的内容:
正常发送,在php文件中带有htmlentities():
FuÃ
正常发送,没有htmlentities() 或在php 文件中带有htmlspecialchars()
Fußball
正常发送,php文件中有utf8_decode()
Fu
在发送字符串之前在 jQuery 脚本上使用 escape()、encodeURIComponent() 或 contentType: "utf-8" 会使表单以 .php 文件无法理解的方式提交,但不仅如此,它仍然会发送字符串为Fu%C3%9Fball。
我还为每种文件类型使用了正确的命令,将我的所有文档编码为utf-8,这没有任何区别,所以我假设一开始都是utf-8。
【问题讨论】:
-
首先,摆脱所有
htmlentities()调用——这需要在根目录下修复,不需要创建实体。你的 page 编码是什么?看起来它可能不是 UTF-8。你能把它变成 UTF-8 吗? -
也应该是 utf-8。我在进行测试时添加了
mb_internal_encoding("UTF-8");,看看这是否是问题所在并且没有任何影响。 -
打开页面时查看浏览器的“编码”菜单。这是关于使用什么编码的最后一句话
-
奇怪的是它不是 utf-8。这次我改用
header('Content-type: text/html; charset=utf-8');,问题就解决了。关于为什么默认情况下它不是 utf-8 的任何想法?我的语言环境是 utf-8,我从来没有设置过任何不同的东西...... -
我添加了一个答案。您可能需要查看默认内容类型的服务器设置
标签: php jquery ajax encoding utf-8