' @'字符显示在刀片​​中混乱

时间:2017-11-05 11:55:50

标签: html mysql laravel encoding utf-8

我正在使用laravel和mysql。我试图检索一个电子邮件字段(包含@)并在我的刀片中显示它。但是所有的电子邮件字符都被搞砸了!

我已尝试过所有方法,编码,任何东西......但仍然无法正常工作。 它在本地很好,但在服务器上它搞砸了。我使用的是ubuntu服务器。

我试过这些:
1.将所有文件编码设置为utf-8
2.在所有html文件中使用utf-8元标记 3.在我的AddDefaultCharset utf-8文件中使用.htaccess 4.在刀片中使用htmlentities($email, ENT_QUOTES, "UTF-8") 5.在刀片中使用htmlspecialchars($email, ENT_QUOTES) 6.在刀片中使用str_replace('@', '@', $email)

PS: 有趣的事:
当我改变数据库中的字段并在@之前和之后放置阿拉伯字符时问题消失了。它就像:exampleب@بgmail.com 但是随着英文字符的出现,它会显示整个字符串中的字符,例如:
YV [

1 个答案:

答案 0 :(得分:0)

听起来客户端中的字节编码为cp1256。 (也就是说,我质疑你的#1。)如果是这样,你需要说出来。在连接上或使用SET NAMES cp1256;

执行此操作

Ψ是希腊语,D8中的CHARACTER SET greek或utf8 / utf8mb4中的十六进制CEA8

طD8中为CHARACTER SET cp1256,在utf8 / utf8mbr4中为D8b7

ب在utf8 / utf8mbr4中为十六进制D8A8

令人困惑的部分原因可能是D8是阿拉伯字母的utf8表示中两个字节的第一个

请提供SELECT HEX(col) ...以获取数据库表中的内容以及您认为的内容。这有助于确定问题是在存储还是在提取上。