UTF8工作流程PHP、MySQL总结[关闭]

2023-11-22

我正在为拥有不同字母表的国际客户工作,因此我试图最终了解 PHP 和 MySQL 之间的完整工作流程,以确保正确插入所有字符编码。我已经阅读了很多关于这方面的教程,但仍然有疑问(有很多东西需要学习),并且我想我可以将它们放在一起并询问。

PHP

header('Content-Type:text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');

HTML

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<form accept-charset="UTF-8"> .. </form>

(虽然后者是可选的,而是一个建议,但我相信我宁愿建议不做任何事情)

MySQL

CREATE database_name DEFAULT CHARACTER SET utf8; or ALTER database_name DEFAULT CHARACTER SET utf8;和/或使用utf8_general_ci作为 MySQL 连接排序规则。

(it is 重要的是要注意如果使用 varchar,这会增加数据库大小)

联系

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET utf8");

商业逻辑

检测是否不是 UTF8mb_detect_encoding()并转换为ivon().
验证过长的 UTF8 和 UTF16 序列

$body=preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]|(?<=^|[\x00-\x7F])[\x80-\xBF]+|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/','�',$body);
$body=preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $body);

问题

  • is mb_internal_encoding('UTF-8')在 PHP 5.3 及更高版本中是必需的,如果是这样,这是否意味着我必须使用所有多字节函数而不是其核心函数,例如mb_substr()代替substr()?

  • 是否仍然需要检查格式错误的输入字符串,如果需要,什么是可靠的函数/类来执行此操作?我可能不想删除坏数据并且对音译了解不够。

  • 真的应该是吗utf8_general_ci更确切地说utf8_bin?

  • 上述工作流程中是否缺少某些内容?

来源:

http://coding.smashingmagazine.com/2012/06/06/all-about-unicode-utf8-character-sets/  
http://webcollab.sourceforge.net/unicode.html  
http://stackoverflow.com/a/3742879/1043231  
http://www.adayinthelifeof.nl/2010/12/04/about-using-utf-8-fields-in-mysql/  
http://akrabat.com/php/utf8-php-and-mysql/  

  • mb_internal_encoding('UTF-8')本身不做任何事情,它只为每个设置默认编码参数mb_功能。如果您没有使用任何mb_功能,没有什么区别。如果是的话,设置它是有意义的,这样你就不必通过$encoding每次单独参数。
  • IMO mb_detect_encoding几乎没有用,因为从根本上不可能准确检测未知文本的编码。您应该知道文本 blob 的编码方式,因为您有关于它的规范,或者您需要解析适当的元数据,例如指定编码的标头或元标记。
  • Using mb_check_encoding检查一团文本在您期望的编码中是否有效通常就足够了。如果不是,则丢弃它并抛出适当的错误。
  • 关于:

    这是否意味着我必须使用所有多字节函数而不是其核心函数

    如果您正在操作包含多字节字符的字符串,那么是的,您需要使用mb_函数以避免得到错误的结果。核心字符串函数仅在字节级别上工作,而不是在字符级别上工作,而字符级别是您在处理字符串时通常需要的。

  • utf8_general_ci vs. utf8_bin只有当整理,即对字符串进行排序和比较。和utf8_bin数据以二进制形式处理,即只有相同的数据才是相同的。和utf8_general_ci应用了一些逻辑,例如“é”与“e”一起排序,大写字母被视为等于小写字母。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTF8工作流程PHP、MySQL总结[关闭] 的相关文章

  • .NET 正则表达式可匹配任何语言的任何类型的字母

    我可以使用哪种正则表达式来匹配 允许 任何语言的任何类型的字母 我需要匹配任何字母 包括任何变音符号 例如 并排除任何类型的符号 数学符号 货币符号 装饰符号 方框图字符等 和标点符号 我正在使用 ASP NET MVC 2 和 NET 4
  • “create_date”时间戳字段的默认值无效

    我有以下 sql 创建语句 mysql gt CREATE TABLE IF NOT EXISTS erp je menus gt id INT 11 NOT NULL AUTO INCREMENT gt name VARCHAR 100
  • 如何使用 php DOM 获取 内的值?

    我如何使用 php DOM 获取 内的值 这是我的 xml 中的一些代码
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • PHP 中的静态类初始值设定项

    我有一个带有一些静态函数的辅助类 类中的所有函数都需要一个 重 初始化函数来运行一次 就好像它是一个构造函数 有实现这一目标的良好实践吗 我唯一想到的就是打电话init函数 如果它已经运行过一次 使用静态 initialized变种 问题是
  • 在另一个文件中扩展类的正确方法是什么?

    这就是我在 foo php 中的内容 class Foo public foo NULL public foo2 NULL public function setFoo foo foo2 this gt foo foo this gt fo
  • 使用第三方库记录来自 PHP 应用程序的所有 cURL 请求

    好吧 我的 PHP Yii2 应用程序遇到了困难 我需要记录来自应用程序的每个传入和传出请求 传入的请求可以轻松地记录在 PHP 本身中 在引导阶段添加一些处理程序 这很容易 但真正的问题是我正在使用许多第三方库 即 Amazon MWS
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • localhost/live - 通过 HTTP_HOST 检测

    假设我在本地开发并在实时服务器上调试小东西 在我的代码中添加这样的内容是个好主意吗 is local strpos SERVER HTTP HOST localhost false define DEBUG is local 然后在设置内容
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 当路由不存在时重定向 laravel 4

    我正在使用 laravel 4 当我的项目处于生产模式时 我得到 抱歉 找不到您要查找的页面 当我到达一条不存在的路线时 当我 grep 我的代码时 它在两个地方找到 vendor symfony debug Symfony Compone
  • Yii 未检测到骆驼案例操作

    伊伊正在给我404 Error如果我声明这样的操作 站点控制器 php public function actionRegisterUser 这就是我在main php label gt Register User url gt site
  • ASP.NET MVC 3 中嵌入的 PHP 站点的 IgnoreRoute

    我有一个带有嵌入式 WordPress 博客的 MVC 3 网站 以下所有 url 均通过 MVC 定向 www mysite com www mysite com aboutus www mysite com contactus 我还有一
  • 将 echo 和 print 合并到一个语句中

    echo 1 print 2 3 返回 214 脚本如何以 14 结尾 当你这样做时 echo 1 print 2 3 PHP 会做 demo http codepad viper 7 com OfrNrs line op fetch ex
  • 使用 Imagick 动态图像创建/Apache 标头

    在将现有的稳定网站转移到新服务器时 我遇到了一些使用 Imagick 动态创建图像的代码的间歇性问题 该代码解析 GET 查询 例如 example com image php ipid 750123 r 0 w 750 h 1000 然后
  • PHP Json_encode 将空格更改为加号 +

    我有一个网络应用程序 我首先将 JSON 数据存储在 cookie 中 然后每 x 秒保存到数据库 它只是打开与服务器的连接 服务器读取 cookie 它实际上并不通过 POST 或 GET 发送任何内容 当我保存到 cookie 时 我的
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo
  • 使用 Webmin 设置 cron 作业

    我正在尝试使用 Webmin 设置一个 Cron 作业每 5 分钟运行一次 它需要定位 php 文件并运行该文件中的 php 脚本 当我在 命令 字段中输入文件路径时 它不起作用 我只是想知道我做错了什么 以及我需要 Cron 作业运行的文
  • 使用 Swift 邮件程序发送邮件时出现错误 501

随机推荐

  • Android Studio 2.1 将字节码转换为 dex 时出错

    自从我将 android studio 从 2 0 更新到 2 1 后 我收到以下错误 错误 将字节码转换为 dex 时出错 原因 Dex 无法解析版本 52 字节代码 这是由于 使用 Java 8 或更高版本编译的库依赖项 如果 您正在库
  • 使用 Visual Studio 2015 编译 ToolsVersion 12

    我安装了一台新电脑并安装了VS2015 编译我当前正在处理的项目会产生一些无效代码 ILSpy 创建无法编译的源代码 使用 ToolsVersion 12 在 VS2013 中运行良好 日志文件告诉我 ToolsVersion 12 丢失
  • ExtJs4 - 与网格 ColumnModel 等效的是什么?

    ExtJs3相当于什么Ext grid ColumnModel在 ExtJs4 中 我想做的是隐藏一列 我在 ExtJs3 中做了如下操作 grid colModel setHidden 1 true 您可以使用 Ext grid colu
  • 查找非有限值的最快方法

    这是受到以下启发 python numpy 中的组合掩码 任务是创建一个包含所有非有限值的布尔数组 例如 gt gt gt arr np array 0 2 np inf np inf np nan gt gt gt np isfinite
  • 使用 EventTrigger 设置属性

    我希望能够使用 EventTrigger 设置属性 但这有很多问题 1 EventTriggers仅支持Actions 所以我必须使用storyBoard来设置我的属性 2 一旦我使用故事板 我有两个选择 停止 动画停止后 值将恢复到动画开
  • git log -L 不带差异

    我正在尝试使用git log L
  • 使用 Ruby 进行科学编程

    我正在使用 python 或 Octave 进行数学计算 因为手头有非常好的函数和库 但最近我对 Ruby 产生了兴趣 我想知道 Ruby 中是否有相当于 Python 中的 numpy scipy 的科学编程工具 具体来说 我正在寻找一些
  • 选择页面上的所有元素[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在寻找 javascript 中的一个函数 它可以单击我页面上的每个元素 链接 按钮
  • 将指针传递给结构数组时出错

    include
  • Bootstrap 多选不起作用

    我正在尝试使用多选 Bootstrap 我使用了以下代码 该代码也可以在他们的网站上找到 http davidstutz github io bootstrap multiselect 它显示了多选按钮 并且由于我已经选择了 奶酪和意大利辣
  • 没有 ControlContainer 的提供者和 ControlContainer 没有提供者

    我正在开发一个使用 Angular2 的应用程序 我正在尝试在我的应用程序中使用反应式表单 但遇到了一些错误 第一个错误是关于 NgControl 的 如下所示 没有 NgControl 的提供者 div 类 col md 8 错误 gt
  • C++ sizeof Vector 是 24?

    我只是在闲逛并学习向量和结构 有一次 我尝试以字节为单位输出向量的大小 这是代码 include
  • Android Gradle 插件 0.13 和 android-apt 1.3 出现错误

    我刚刚将我的 android gradle 插件从 0 12 更新到 0 13 而且我已经下载了gradle 2 1 然后 我尝试使用 beta 版的 android studio 0 8 9 但根据http tools android c
  • 抑制 Visual Studio 输出窗格的输出 (C++)

    当我在 Visual Studio 调试器中运行 Win32 项目时 我得到了大量关于加载了哪些 DLL 第一次机会异常等信息 有没有办法可以抑制这个输出 有一天 我可能想知道 C Windows SysWOW64 ntdll dll 何时
  • 如何获取 Android 手机所有者的名字和姓氏?

    有没有办法获取 Android 手机所有者的名字和姓氏 我在网上搜索过 但没有运气 我偶然发现thisStackoverlow 中的问题 但这正在获取所有联系人的名字和姓氏 我需要的只是获取所有者的名字和姓氏 我认为这仅适用于 ICS 及以
  • Python 社交身份验证 NotAllowedToDisconnect 位于 /disconnect/facebook/1/

    我正在尝试在 Django 应用程序中将注销与 Python Social Auth 一起使用 但我得到了 NotAllowedToDisconnect at disconnect facebook 1 这些是我的设置 SOCIAL AUT
  • 什么是基于文件的数据库?

    我参加了有关关系数据库的课程 我被要求研究基于文件的方法与关系数据库相比的优势 我发现理解关系数据库更容易 但理解基于文件的系统却很困难 基于文件的系统是否与在 Windows 分层系统上存储文件相同 即存储在文件夹和目录下的文本文件 纯
  • Reactjs删除拼写检查属性

    我正在使用 ReactJS 来渲染我的 DOM 我想添加spellcheck false 文本输入上的属性 所以我这样做 render return div div
  • 检查是否启用第三方cookie

    我有一个应用程序需要检查客户端浏览器是否启用了第三方 cookie 有谁知道如何在 JavaScript 中做到这一点 技术背景 第三方通过 HTTP 不是 JavaScript 设置和读取 cookie 因此 我们需要向外部域发送两个请求
  • UTF8工作流程PHP、MySQL总结[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在为拥有不同字母表的国际客户工作 因此我试图最终了解 PHP 和 MySQL