我正在使用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 [
答案 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) ...
以获取数据库表中的内容以及您认为的内容。这有助于确定问题是在存储还是在提取上。