【问题标题】:Greek characters encoding works in HTML but not in PHP希腊字符编码在 HTML 中有效,但在 PHP 中无效
【发布时间】:2013-03-02 03:38:08
【问题描述】:

我有一个非常奇怪的问题,无法弄清楚。 我正在使用记事本++,如果我将文件保存为带有希腊字符(不是来自数据库的字符)的 .php,它会在 Web 浏览器中将希腊字符显示为问号,但如果我将相同的字符文件保存为 .html,它会正确显示字符。

如果从数据库中显示希腊字符,它会正确显示它们而不会出现问题。它在我的共享主机上也不能正常工作,但在我的本地主机上工作正常。

我尝试以不同的编码保存 .php 文件,但仍然是同样的问题。我还尝试使用 utf-8 添加 php header() 和元标记,但没有运气。

可能是什么问题? 谢谢

【问题讨论】:

  • 保存文件的编码必须与您声明的编码匹配(例如,通过 Meta 标签)。如果你确保这些匹配,它应该可以工作。如果还是不行,您能否在此处显示一个示例并检查您的浏览器该页面实际使用的编码?
  • 我现在无法使用十六进制编辑器,但是这些??对我来说看起来像正常的问号。你确定你在 Notepad++ 中保存了正确的希腊字符并且文件是 UTF-8 编码的吗?这似乎几乎是不可能的。你能回到 .html 文件并再次将其保存为 Php 吗?看起来你的角色在途中的某个地方出现了乱码
  • 您是否尝试过在 Notepad++ 中使用 BOM 和不使用 BOM 进行保存?
  • 是的,弗雷德,我都试过了,但运气不好。
  • 我用 BOM 试过(从你的来源),它显示得很好。如果我在没有 BOM 的情况下保存它,一切都会变得一团糟。请注意,在 Notepad++ 中,您必须从“编码”菜单中选择“转换为”而不是“编码输入”,然后保存文件。

标签: php html mysql encoding utf-8


【解决方案1】:

尽管您的 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 的编码保存文件,请销毁它们并从旧内容中创建新文件。有时,编辑器在创建文件后并不能真正正确地切换编码,尽管 notepad++ 通常在这方面做得很好;只需使用converto to 而不是encode in 功能!

如果它仍然不工作,虽然我希望它现在可以工作,您可以查看其他一些 php 替代品,如 mb_detect_encodingmb_convert_encodinghtmlentitieshtmlspecialchars 以解决问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多