【问题标题】:Problems with website collation网站整理问题
【发布时间】:2013-04-27 14:35:44
【问题描述】:

我正在创建一个以立陶宛语存储信息的网站。 它基本上由所有拉丁字母和一些独特的字母组成: Ąą, Čč, Ęę, Ėė, Įį, Šš, Ųų, Ūū, Žž。

我正在尝试将我的数据库排序规则设置为 utf8_general_ci 或 cp1257_lithuanian_ci。 不过,我更喜欢使用 utf8_general_ci。

在页面上打印立陶宛字符时,这些排序规则都可以正常工作, 但 php 代码似乎不理解立陶宛字符。例如 - 当我尝试将所有立陶宛字符交换为类似的拉丁字母 (Ą = A, Ė = E) php 无法将这些字母与代码中描述的立陶宛字母匹配。当我尝试小写立陶宛文本时,立陶宛字母变成了 2 个拉丁字母。

我应该尝试更改什么才能使其正常工作?

编辑:

代码:

<?php
    echo 'ĄąČčĘęĖėĮįŠšŲųŪūŽž';
?>

返回:

ĄąÄĨÄęĖėĮįŠÅŲųŪūŽž

我已经做了什么:

-All files set to "UTF8 No Mark"
-Html has a propper meta tag
-Mysql database collation is "utf8_general_ci"

【问题讨论】:

标签: php html mysql utf-8 collation


【解决方案1】:

确保您的文件是没有 BOM 编码的 UTF-8。

您的 php 页面应该发送一个 UTF-8 标头:

header("Content-Type: text/html; charset=utf-8");

【讨论】:

    【解决方案2】:

    你忘记了一件事。您必须像这样通知浏览器有关编码:

    <meta charset='utf-8'>
    

    或者这个:

    <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
    

    或者这个:

    <?php
        header("Content-Type: text/html; charset=utf-8");
    ?>
    

    如果您不告知浏览器有关编码的信息 - 浏览器将使用其配置中的默认编码,否则它将尝试自动检测。

    【讨论】:

      【解决方案3】:

      您必须注意的一件事是 PHP 没有为字符串定义内部编码:字符串只是字节数组,因此要在 PHP 中表示文本,您总是需要两件事:

      1. 字节数组
      2. 编码方案

      出现在代码中的字符串文字的字节内容取决于您生成文件的方式(具体而言,它取决于您的文本编辑器使用的编码)。 PHP 解释器不关心脚本的编码,只要它与 ASCII 兼容,因此解析器可以正确读取并识别语法。

      最终,要按预期获得文字字符串输出,您需要将文本文件使用的编码传达给浏览器。这是在传输级别完成的,带有 HTTP 标头:

      Content-Type: text/html; charset=<INSERT YOUR SOURCES ENCODING>
      

      在 PHP 中,标头必须在任何输出之前发送,函数 header()

      【讨论】:

        猜你喜欢
        • 2020-08-15
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 2011-08-10
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多