0

Twitter bootstrap 不会显示字母đ ć č ž š,克罗地亚字母。我将字符集设置为 UTF-8,但它不会这样做......我从 mysql 获取数据并且在数据库中没问题,首先我认为它是字体 Helvetica,所以我得到 Helvetica Neue Pro LT 但......不确定我正确加载它...知道如何加载... Twitter bootstap + Font Awesome

所以我厌倦了Arial,它不会工作!

所以有什么帮助吗?很多

4

1 回答 1

3

可能有几个原因。

在对数据库进行故障排除之前,您应该首先尝试使用一些静态内容,以确保您的编辑器和服务器设置正确。

尝试将一些 html 内容添加到包含克罗地亚字符的 php 文件中。如果这些字符在您的浏览器中出现错误,请确保:

  1. 您的代码编辑器使用 UTF-8 编码保存您的 PHP 文件
  2. 您的网络服务器将您的 PHP 文件输出为 UTF-8。要检查这一点,请查看浏览器中的 http 标头。应该有一个名为“Content-Type”的行,其值为“text/html; charset=UTF-8”。查看 Chrome 的此屏幕截图以找到 http 标头:http: //www.jesperkristensen.dk/webstandarder/doctype-chooser/chrome.png

如果静态字符正确,下一步是对数据库进行故障排除。

字符集

计算机本质上只知道数字,因此计算机内部将字母和字符视为数字。例如,a默认情况下,该字母在美国计算机上存储为数字 97,而在美国计算机上存储为b98。有关完整列表,请参阅http://www.asciitable.com/

非常简单地说,每当在屏幕上显示字符时,计算机都会使用这个数值并在字体库中查找该值以找到合适的字形显示在屏幕上。

计算机在显示某些文本时搜索的字形(字符)集称为字符集。特定的编码规则定义了哪些数字映射到字符集中的哪些字形,称为字符编码。

当人们谈论 ASCII 集时,他们谈论的是一组字形,其中包括大写和小写的英文字母、阿拉伯数字 (0-9) 和一些特殊字符。但他们也可能指的是 ASCII 字符编码,它指定哪些数字映射到哪些字形。再次 - 见 www.asciitable.com

不幸的是,除了英文拉丁字符之外,随着计算机在 60 年代和 70 年代在世界各地激增,发明了本地字符集、字体和编码以满足本地需求。它们具有深奥的名称,例如 ISO-8859-5、EUC-JP 或 IBM860。

尝试使用与文本编码不同的字符编码标准来读取文本通常会让人头疼。英文字符会起作用,因为它们在不同的编码和集合中表示相同,但​​其他任何东西都会破坏。例如,该字符æ是一个特殊的丹麦元音字符,当使用丹麦的主要编码标准 ISO-8859-1 标准时,其数值为 230。但是,如果您将一个文本文件保存In Denmark, an apple is called æble.到软盘上并将其发送给保加利亚的朋友,他的计算机会假定该文本文件是使用 ISO-8859-5 标准对西里尔文本进行编码的,它会显示In Denmark, an apple is called цble为是错误的,因为根据 ISO-8859-5 标准,数值 230 映射到ц.

要比较两种字符编码,请参阅: http: //en.wikipedia.org/wiki/ISO/IEC_8859-1 http://en.wikipedia.org/wiki/ISO/IEC_8859-5

在过去,开发人员必须为他们的应用程序选择使用哪种字符集和编码,因为不存在通用的解决方案,但幸运的是,在 1990 年代出现了一种称为 Unicode 的新字符集。

这个字符集包括来自世界各地的成千上万的字形,足以涵盖世界上几乎所有当前的字母表和语言。与 Unicode 一起,设计了一些关于如何编码文本的规范。今天最流行的称为 utf-8,它可以方便地向后兼容旧的美国 ASCII 7 位字符编码。因此,所有有效的 ASCII 文本也是有效的 utf-8 文本。这种向后兼容性也是一个诅咒,因为它经常导致新手开发人员得出结论认为他们的软件正在运行,而实际上它只适用于 ASCII 字符集中存在的字符。

第一步 - 确保您的数据库将文本存储为 utf-8

在正确显示文本之前,必须正确存储它。使用您的 SQL 管理工具检查您正在使用的表的字符编码。如果不存在任何信息,则默认值可能是从数据库模式或服务器配置继承的,因此也要检查一下。

如果您的表未使用 utf-8 或您无法验证它是否使用 utf-8,您可以在 SQL 工具中针对您的表运行此命令,以明确指示数据库使用 utf-8 存储数据:

ALTER TABLE name_of_your_table
CHARACTER SET utf8
COLLATE utf_unicode_ci;

这告诉数据库使用 utf-8 编码存储数据,使其能够存储您的特殊字符。数据库还使用称为排序规则的概念,它是一组关于如何对字形进行排序和比较的规则。例如 ß 在德语中可能被解释为两个 s 字符,而其他语言可能会认为它是在排序时出现在普通拉丁字符之前或之后的特殊字符。除非您有充分的理由,否则请使用与语言无关的 utf_unicode_ci 排序规则,通常会正确排序您的内容。名称中_ci的 表示不区分大小写,表示在进行诸如 之类的比较时WHERE country = USA,小写的记录也会匹配。

第二步——webserver和数据库需要一起说utf-8

现在您的数据库以正确的方式存储内容,您必须确保您的网络服务器和数据库也正确通信。同样,许多环境设置会影响它们的默认设置,因此在连接到数据库时明确说明是个好主意。如果在 PHP 中使用 PDO 进行连接,可以使用以下示例进行连接(取自 php.net):

<?php
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'username';
$password = 'password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);
?>

这里重要的是选项关联数组。它包含“SET NAMES utf8”,这是一个在打开连接时对数据库运行的 SQL 命令。它有两个含义。

  1. 它指示数据库随后发送的任何查询都将使用 utf-8 进行编码。这样,数据库将理解来自网络服务器的非 ascii 字符。
  2. 它指示数据库从数据库返回到 Web 服务器的任何响应都将被 Web 服务器假定为使用 utf-8 编码并被处理。

使用使用 utf-8 编码存储数据的数据库和使用 utf-8 编码连接和传输查询结果的 Web 服务器,您应该准备好在您的网站上显示克罗地亚语字符。

于 2013-05-04T19:44:21.770 回答