当前位置: 首页 > 面试题库 >

具有国际字符串的PHP和MySQL最佳实践

谢叶五
2023-03-14
问题内容

即使将MySQL DB,表和字段的排序规则设置为utf8_general_ci,也经常发生将 é 等字符转换为 é的情况 。页面的
Content-Type中 的编码也设置为UTF8。

我知道utf8_encode / decode,但是我不确定在哪里以及如何使用它。

我已经阅读了“
绝对是每个软件开发人员的绝对最低限度,肯定必须了解Unicode和字符集(无借口!)
”一文,但是我需要一些特定于MySQL / PHP的指针。

问题:如何确保用户输入的包含国际字符的数据不会损坏?


问题答案:

首先看一下http://www.nicknettleton.com/zine/php/php-
utf-8-cheatsheet,
我认为缺少了一件重要的事情(也许我忽略了这一点)。根据您的MySQL安装和/或配置,您必须设置连接编码,以便MySQL知道您期望在客户端上使用哪种编码(意味着MySQL连接的客户端,应该是您的PHP脚本)。您可以通过手动发出

SET NAMES utf8

查询发送到发送到MySQL服务器的任何其他查询之前。

如果您在PHP端使用PDO,则可以设置连接以使用以下命令在每个(重新)连接上自动发出此查询:

$db=new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");

初始化数据库连接时。



 类似资料:
  • 我有一个Spring mvc项目,有Spring data、jpa和hibernate。我有一个多语言数据库。我设计了我的数据库和实体。我正在寻找一种按语言查询表的最佳实践。我必须编写自定义jpa查询吗,或者有一种通用的方法来查询我的表。 如果我在数据库或实体设计上有错误,请警告我。 数据库: 本地化字符串实体: 多语言字符串实体: 类别实体: 类别存储库: 我怎么能传递一个语言参数到并获得该语言

  • 问题内容: 我对字符集所读的内容完全感到困惑。我正在开发一个接口来存储mysql数据库中以html格式格式化的法语文本。 我了解的是,正确显示所有法语特殊字符的安全方法是将它们存储为utf8。因此,我为数据库和每个表创建了一个utf8的mysql数据库。我可以通过phpmyadmin看到字符完全按照预期的方式存储。但是通过php输出这些字符会产生不稳定的结果:重音字符被无意义的字符替换。这是为什么

  • 问题内容: 注意:很抱歉,如果这是一个非常简单的问题,但是我对代码的格式有些执迷不已。 我有一个类,该类具有返回字符串的函数,该字符串将构成电子邮件的正文。我希望此文本经过格式化,以便它在电子邮件中看起来很正确,而且也不会使我的代码显得时髦。这就是我的意思: 但也可以写成: 但是换行和退货有什么关系呢?有什么不同?是相当于或?在行与行之间创建行距时应该使用哪个? 然后是输出缓冲和heredoc语法

  • 问题内容: 特性已成为PHP5.4的最大新增功能之一。我了解语法并了解特性背后的思想,例如将水平代码重用于日志,安全性,缓存等常见内容。 但是,我仍然不知道如何在项目中利用特质。 是否有任何已经使用了特征的开源项目?关于如何使用特征构造体系结构的任何好的文章/阅读材料? 问题答案: 我个人的观点是,在编写简洁的代码时实际上很少使用特质。 与其使用特征将代码入侵到类中,不如通过构造函数或setter

  • PHP 是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些 bug。每个版本都有自己独有的特性、多余和怪异之处,也很难跟踪哪个版本有哪些问题。

  • 问题内容: 这个问题已经在这里有了答案 : 如何防止PHP中进行SQL注入? (28个答案) 4年前关闭。 从库中移出后,我正在使用PDO 。我用什么代替旧功能? 我需要对单引号进行转义,以便它们进入我的数据库,并且我认为可能有一种更好的方法来解决此问题,而无需在所有字符串中都添加斜杠。我应该使用什么? 问题答案: 您应该使用PDO Prepare 从链接: 为将使用不同参数值多次发出的语句调用P