php - mySQL(和 php)中的特殊字符 - 基础知识

标签 php mysql encoding utf-8 character-encoding

我很困惑!最近我的网络酒店更新了 php,现在我的旧表以不同的方式(错误地)呈现特殊字符。 我的表和我的 input/output-php-pages 都设置为 utf-8,并且自此更新以来,来自 php 的输入也被不同地处理;现在我的特殊字符在进入数据库时​​正在被 utf-8 编码。因此,自从这一更改以来,当我在 phpMyAdmin 中查看表格时,旧的插入内容具有原始(非编码)特殊字符 - 新帖子具有 utf-8 编码字符(也是特殊字符)。

所以我想做的是重写输入和输出以插入和显示非编码字符 - 但我不确定这是否可以在不完全跳过 utf-8 的情况下实现(在 php 和 mySQL 中)。但是有没有一种utf-8-方式来提交非编码字符?

而且 - 也许更根本的是 - 我需要了解可能的缺点是什么。我正在内外使用丹麦语字符,并且我不会使用任何其他语言(对于这个项目)。因此,如果可以使用 utf-8 插入和输出非编码字符 - 我会遇到意外/破坏性问题吗?

我读过很多关于 php/mySQL/特殊字符的帖子,但我还没有看到这个问题的角度。希望我没有重复 我希望不会,因为在更新之前它一直工作得很好。

最佳答案

即使您只使用丹麦语字符,您也可以一直使用 utf8。

很多地方需要声明编码:

  • 位于 html 顶部
  • 数据库中的列(列 CHARACTER SET 默认来自表,默认来自数据库)
  • PHP 代码中的编码。

当您创建表时,添加默认字符集utf8。如果您有现有的 table ,但没有,请说出来;我们可能需要对付他们。 如果您需要丹麦语排序规则,也请指定 COLLATION utf8_danish_ci 。然后(如果我没记错的话),aa 将排序在 z 之后。 (默认值为 utf8_general_ci,它不会进行排序。) 找出您的 php 代码中拥有(或可以获得)的编码。如果您有一些带有重音符号的文本,请执行以下操作:

$hex = unpack('H*', $text);
echo implode('', $hex)

如果您使用 utf8,å 将是 C3A5,对于 latin1 它将是 E5

无论表中的编码是什么,您都必须根据 PHP 中数据的编码调用 set_charset('utf8') 或 set_charset('latin1')。当 PHP 和 MySQL 之间传递内容时,MySQL 很乐意在 latin1 和 utf8 之间进行转码。对于不同的API:

⚈  mysql: mysql_set_charset('utf8');
⚈  mysqli: $mysqli_obj->set_charset('utf8');
⚈  PDO: $db = new PDO('dblib:host=host;dbname=db;charset=UTF-8', $user, $pwd);

有关更多信息,请参阅 http://mysql.rjweb.org/doc.php/charcoll .

关于php - mySQL(和 php)中的特殊字符 - 基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903350/

相关文章:

php - 表已经是 utf8 字符集,仍然在某些字符中出现问号

php - 选择下拉项时将 CSS 添加到单个表格行?

c# - 是否可以在 .exe 或应用程序文件中包含 Mysql.Data?

javascript - 在nodejs中用双引号切片缓冲区时获取额外的字符

php - 使用 json_encode 函数时为空 json 字符串

PHP 高级作业队列

php - 如何在 Eloquent Laravel 中使用名称查找条目?

mysql - 将 Mysql 5.5.33 复制到 MariaDB 5.5.33 问题

mysql - 为什么 MySQL 使用 latin1_swedish_ci 作为默认值?

java - 在 Java 中将字符串编码为 HTML