【问题标题】:Full utf-8 compliance for a php web app?php Web 应用程序的完全 utf-8 合规性?
【发布时间】:2012-03-14 09:28:57
【问题描述】:

我正在编写一个小型网络应用程序,它将接收和解析来自用户的制表符分隔的文本文件。这些文件将通过textareamultipart/form-data 表单上传。这些文件将采用各种字符集,包括亚洲等。因此,我试图在整个应用程序中使用 utf-8。

该网站完全(据我所知)采用 UTF-8 编码:

  • 每个php文件都以utf-8编码保存;
  • 我已将default_charset = "utf-8" 添加到我的php.ini 文件中;
  • HTML 标头包含所需的 utf-8 提及:

    header('Content-Type:text/html; charset=UTF-8');
    ...
    <?xml version="1.0" encoding="utf-8" ?>
    ...
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    
  • textarea 表单包含 accept-charset="UTF-8" 标记。

  • db 以 utf-8 进行整理;
  • 到数据库的每个连接都包含选项1002 =&gt; 'SET NAMES utf8'

现在,我刚刚发现我需要手动将 mb_regex_encoding 设置为 utf-8 才能使我的一个解析功能正常工作(我使用 mb_split() 来识别和替换制表符和新行)。所以……

我还需要做些什么来确保我的网站是一劳永逸的 utf-8?特别是,我应该设置任何其他编码函数,例如mb_internal_encoding(),如果是,我应该在代码中的哪个位置设置(例如,在index.php 文件的开头?

【问题讨论】:

标签: php unicode localization


【解决方案1】:

我还能想到两件事;

mb_internal_encoding('UTF-8');

...尽早在 PHP 脚本中,并且

mysqli_set_charset($link, 'utf8');

...设置连接字符集,如果您使用的是 MySql。对于 PDO,您可以使用 connection string 指定它:

"mysql:host=$host;dbname=$db;charset=utf8"

【讨论】:

  • 注册。 mb_internal_encoding(),我应该在session_start() 之前还是之后这样做?
  • 您应该在尝试操作任何多字节字符串之前设置多字节字符串操作函数的内部编码。我不认为 session_start() 意味着任何字符串操作,所以我不会将它用作光标。
  • 我只使用它作为脚本读取的第一件事。我的代码以require_once(objects in session); 开头,然后是session_start()
  • 哇,这里的问题和“我的”答案都被编辑了这么多,我几乎认不出它们了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2013-05-27
  • 2012-08-30
  • 2019-08-04
  • 2020-12-18
  • 2011-07-04
相关资源
最近更新 更多