如何在PHP中处理字符编码 - Codeigniter?

时间:2011-08-22 18:38:10

标签: php codeigniter character-encoding

将用户输入转换为UTF-8的最佳方法是什么?

我有一个简单的表单,用户将传入HTML,HTML可以使用任何语言,并且可以采用任何字符编码格式。

我的问题是:

  • 是否可以将所有内容表示为UTF-8?

  • 我可以使用什么来有效地将任何字符编码转换为UTF-8,以便我可以使用PHP字符串函数解析它并将其保存到我的数据库中,然后使用htmlentities回显?

我正在努力研究如何最好地实现这一点 - 建议和链接赞赏。

我正在使用Codeigniter及其input class来检索帖子数据。

我应该提出几点:

  • 我需要将HTML特殊字符转换为各自的实体
  • 接受编码并以相同的编码返回它可能是个好主意。但是,我的网络应用程序正在使用:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这可能会对事情产生负面影响。

6 个答案:

答案 0 :(得分:4)

accept-charset标记中指定<form>,告诉浏览器提交以UTF-8编码的用户输入数据:

<form action="foo" accept-charset="UTF-8">...</form>

请点击此处查看HOW TO Use UTF-8 Throughout Your Web Stack的完整指南。

答案 1 :(得分:2)

  

是否可以将所有内容表示为UTF-8?

是的,UTF-8是Unicode编码,因此您可以使用Unicode中定义的任何字符。到目前为止,这是你用电脑做的最好的事情。

  

我可以使用什么来有效地将任何字符编码转换为UTF-8

iconv可让您将几乎任何编码转换为任何其他编码。 但是,因为你必须知道你正在处理什么编码。你不能说iconv,不管这是什么,把它变成UTF-8!”。不幸的是,它不是如何运作的。你只能说iconv,我在BIG5中有这个字符串,请将其转换为UTF-8。”

如果您只处理UTF-8中的表单数据,则可能永远不需要转换任何内容。

  

这样我就可以用PHP字符串函数解析它了

“PHP字符串函数”用于字节。他们不关心字符或编码。根据您的想法,在UTF-8文本上使用天真的PHP字符串函数会给您带来不好的结果。在MB extension中使用编码感知字符串函数进行任何多字节编码字符串操作。

  

将其保存到我的数据库

只需确保您的数据库以UTF-8存储文本,并且您已将数据库连接设置为UTF-8(即数据库知道您正在向其发送UTF-8数据)。您应该能够在CodeIgniter数据库连接设置中指定它。

  

随后使用htmlentities回声?

只需echo htmlentities($text),您无需再做任何事情了。

  

但是,我的网络应用程序正在使用:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

     

这可能会对事情产生负面影响。

完全没有。它只是向浏览器发出信号,表明您的页面是以UTF-8编码的。现在你只需要确保实际情况就是如此(正如你想要做的那样)。它还暗示到浏览器它应该将UTF-8发送到服务器。您可以使用表单上的accept-charset属性明确说明。

我可以推荐What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text,这可能有助于您了解更多信息。

答案 2 :(得分:1)

  

1)是否可以将所有内容表示为UTF-8?

是的,UNICODE中定义的所有内容。这是目前你能获得的最多,UNICODE可以支持未来的空间。

  

2)我可以使用什么来有效地将任何字符编码转换为UTF-8,以便我可以使用PHP字符串函数解析它并将其保存到我的数据库中,然后使用htmlentities回显?

您唯一需要知道的是数据的实际编码。如果您希望Web应用程序支持UTF-8进行输入和输出,则前端需要发出信号表明它支持UTF-8。有关应用程序用户界面的指南,请参阅Character Encodings

在PHP中,您需要使用它支持的编码来提供任何函数。有些人需要指定编码,对于某些人你需要转换它。如果它支持您的要求,请务必检查功能文档。另外检查你的PHP配置。

相关:

  1. Preparing PHP application to use with UTF-8
  2. How to detect malformed utf-8 string in PHP?

答案 3 :(得分:0)

如果您想更改字符串的编码,可以尝试

$utf8_string = mb_convert_encoding( $yourBadString , 'UTF-8' );

答案 4 :(得分:0)

我发现UTF-8编码唯一有效的方法是设置config.php

putenv('LC_ALL=en_US.utf8'); // or whatever language you need
setlocale(LC_ALL, 'en_US.utf8');  // or whatever language you need
bindtextdomain("mydomain", dirname(__FILE__) . "/../language");
textdomain("mydomain");

答案 5 :(得分:-1)

编辑:

Is it possible to represent everything as UTF-8?

是的,这是您需要确保的:

  • html:headers / meta-header设置为utf-8
  • 所有文件保存为utf-8
  • 数据库整理,表格和数据编码为utf-8

What can I use to effectively convert any character encoding to UTF-8

您可以使用utf8_encode(因为系统主要设置为西欧语言,通常为ISO-8859-1或其密切关系ref),然后将其保存到数据库中

// eg
$name = utf8_encode($this->input->post('name'));

正如我之前提到的,您需要确保数据库整理,表格和数据编码为utf-8。在CI中,在您的数据库连接配置

// Make sure have these lines
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';