一劳永逸地,我想清楚如何在我的应用程序中处理 ü 等。我知道使用 UTF-8 是存储/表示这些奇怪字符的最佳方式。
所以我在我的 HTML 中声明了一个元字符集:
<meta charset="utf-8">
将内容存储在我的数据库中,它还需要正确的设置,所以我将排序规则设置为utf8_general_ci
据我了解,没有其他地方可以定义字符集。但问题是什么?
如果我进入 phpMyAdmin 并在内容字段中添加 jülich,然后通过 mysql 查询和 PHP 从数据库中减去内容。ü 正确显示。但是,如果我在 Textarea 中查看它,它会显示一个黑色菱形图形和一个白色 ? 在里面。
如果我在我的应用程序的文本区域中输入文本并提交,它会在文本区域中显示正确。但在网站上显示 ü
这些是 phpMyAdmin 启动屏幕中的字符集设置:
作为对大安问题的回答:
特点%:
character_set_client = utf8
character_set_connection = utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results = utf8
character_set_server = latin1
character_set_system = utf8
character_sets_dir = /usr/share/mysql/charsets/
整理%
collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = latin1_swedish_ci
我该如何解决这个问题?
到目前为止我做过的事情:
添加:header('Content-type: text/html; charset=utf-8');
添加:$this->db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
添加:<meta http-equiv="content-type" content="text/html; charset=utf-8" />
添加:$this->db = new PDO($dsn, $username, $password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
解决方案
以上所有内容都像魅力一样工作。但是如果你使用一个函数来替换某些特殊的例程并通过utf8_decode()
它返回被替换的字符串显然不会显示 ü ;(