我有一个很难解决的奇怪问题。 我正在使用notepad ++,如果我将文件保存为带有希腊字符的文件(字符不是来自数据库),它会将希腊字符显示为Web浏览器中的问号,但如果我将相同的字符文件保存为.html,则会正确显示字符。
如果从数据库显示希腊字符,它会正确显示它们而不会出现问题。此外,它在我的共享主机上无法正常工作,但在我的本地主机上工作正常。
我试图以不同的编码保存.php文件,但仍然存在同样的问题。我还尝试用utf-8添加php header()和meta标签,但没有运气。
可能是什么问题? 感谢
答案 0 :(得分:5)
即使你的mysql数据正确输出听起来很奇怪,因为php字符串编码失败,我试图解决你的问题的方法,就是将问题分解成试图识别这个错误编码生成位置的步骤!
首先,您应该尝试在php.ini文件中设置default_charset
到utf-8
,如下所示:
default_charset = "utf-8";
如果由于提供者限制而无法做到这一点,您仍然可以使用ini_set函数在运行时更改值!
您还需要确保将网络服务器设置为输出utf-8编码文件!在Apache中,这可以在httpd.conf中或使用htaccess文件中完成:
AddDefaultCharset UTF-8
此时如果一切都失败了,仍然......尝试使用php标头和相对的html字符集:
<?php header("content-type: text/html;charset=utf-8") ?>
<!doctype>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php echo "α β γ δ ε ϝ ϛ ζ η θ ι κ λ μ ν ξ ο π ϟ ϙ ρ σ τ υ φ χ ψ ω ϡ" ?>
</body>
</html>
但是,非常重要的是,您的文件也使用适当的编码保存(utf-8几乎总是更好的选择,它有助于防止相当多的问题)。如果你保存的编码不同于utf-8的文件,请从旧内容中删除一个新的文件。有时编辑器在创建文件后无法正确切换编码,即使记事本++通常在这方面做得很好;只使用converto to
而不是encode in
功能!
如果它仍然不起作用,虽然我希望它现在可以使用,你可以查看一些其他的php备选方案,例如mb_detect_encoding,mb_convert_encoding,htmlentities和htmlspecialchars为了解决问题!