0

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

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

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

我应该尝试改变什么以使其工作?

编辑:

编码:

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

返回:

Ä„Ä…ÄĨÄęĖėĮÄÆÅ ÅŲųÅŖūŽž</p>

我已经做了什么:

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

3 回答 3

3

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

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

header("Content-Type: text/html; charset=utf-8");
于 2013-04-27T14:42:27.783 回答
0

你忘了一件事。您必须通知浏览器有关编码的信息,如下所示:

<meta charset='utf-8'>

或这个:

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

或这个:

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

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

于 2013-04-27T15:34:13.653 回答
0

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

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

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

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

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

在 PHP 中,头文件必须在任何输出之前发送header()

于 2013-04-27T15:53:26.083 回答