gpt4 book ai didi

php - Form 将特殊拉丁字符保存为符号

转载 作者:行者123 更新时间:2023-11-29 00:16:43 26 4
gpt4 key购买 nike

我的 PHP 表单正在提交特殊的拉丁字符作为符号。

所以,Québec 变成了 Québec

我的表单设置为 UTF-8,我的数据库表具有 latin1_swedish_ci 排序规则。

PHP: $db = new PDO('mysql:host=localhost;dbname=x;charset=utf8', 'x', 'x');

绑定(bind)参数:$sql->bindParam(":x", $_POST['x'],PDO::PARAM_STR);

我是 PDO 的新手,所以我不确定问题出在哪里。谢谢

*我正在使用 phpMyAdmin

最佳答案

进一步扩展编码问题......

每当您看到源代码中的一个字符变成两个(或更多字符)时,您应该立即怀疑编码问题,尤其是在涉及 UTF-8 的情况下。这就是为什么。 (如果您已经知道其中的一些内容,我深表歉意,但我希望也能帮助 future 的一些 SO'ers。)

所有字符都不是以字符的形式存储在您的计算机中,而是以字节的形式存储。在过去,空间和传输时间比现在有限得多,所以人们试图尽可能地保存每个字节,甚至不使用完整的字节来存储一个字符。现在,因为我们意识到我们需要与整个世界交流,所以我们决定能够用每种语言代表每个角色更为重要。这种转变并不总是一帆风顺,而这正是您遇到的问题。

Latin-1(有多种形式)是一种始终对字符使用单个 8 位字节的编码。这意味着它只能有 256 个可能的字符。如果您只想写英语或瑞典语,但添加俄语和中文还不够。 (background on Latin-1)

UTF-8 以完全相同的方式对 Latin-1 的前半部分进行编码,这就是为什么您会看到大多数字符看起来都一样。但它并不总是对一个字符使用一个字节——一个字符最多可以使用四个字节。 (utf-8)正如您所发现的,它使用 2 个字节来表示 é。但是 Latin-1 并不知道这一点,并且正在尽最大努力显示这两个字节。

诀窍是始终指定字节流的编码(例如来自文件、URL 或数据库的信息),并确保编码正确。 (当然,有时很难找出答案。)大多数现代语言,如 Java 和 PHP,都能很好地处理不同编码之间的所有转换问题,只要您正确指定了要处理的内容。

关于php - Form 将特殊拉丁字符保存为符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22722388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com