网站整理问题

时间:2013-04-27 14:35:44

标签: php html mysql utf-8 collation

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

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

在页面上打印立陶宛字符时,任何一个theese collat​​ions都能正常工作, 但PHP代码似乎并不了解立陶宛字符。例如 - 当我尝试将所有立陶宛字符交换为simillar拉丁字母(Ą= 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"

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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");
?>

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

答案 2 :(得分:0)

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

  1. 一个字节数组
  2. 编码方案
  3. 代码中出现的字符串文字的字节内容取决于您生成文件的方式(具体而言,它取决于文本编辑器使用的编码)。 PHP解释器不会对脚本的编码感到烦恼,只要它与ASCII兼容,因此解析器可以正确读取它并识别语法。

    最终,要按原样输出文字字符串,您需要将文本文件使用的编码传递给浏览器。这是在传输级别完成的,使用HTTP标头:

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

    在PHP中,必须在使用函数header()

    的任何输出之前发送标头