mysql - Perl UTF8 CGI 和 DBI ... 正确的工作流程是什么?

标签 mysql perl utf-8

我很高兴重建一个基于 perl 的 Web 框架以支持 UTF8。我采取了以下步骤

对于主脚本:
使用开放式 IO => ":utf8",":std";
使用utf8;

对于 DBI 适配器:
$self->{dbh}->{'mysql_enable_utf8'} = 1;'

在我的 POST 和 GET 请求解析器中,基于 CGI:
foreach (@val) { $_ = decode("UTF-8",$_);

据我所知,这在我使用 Perl 5.10.1 的本地 Ubuntu 上工作得很好,但在运行 5.10 的网络服务器上,解码 POST 或 GET 会弄乱文本。

我必须承认,我对整个 UTF8 的事情感到很困惑。我需要
阅读模板
从 mySQL 获取数据
处理 POST 和 GET 插入 mySQL
编写模板

我在这里忘记了什么吗?什么会导致反复无常的行为?我在主脚本中使用的每个模块是否都需要专门使用 utf8 或者如果主脚本这样做就足够了吗?

感谢任何提示,
托马斯

最佳答案

use utf8; 正如一些人所说,就您的 i/o 问题而言,这是一个空操作:它只是说“将我的源代码视为 utf8 编码”。

MySQL/DBI 方法物超所值。

对于 CGI,更新到最近的 CGI 并设置 $CGI::PARAM_UTF8=1,它会为您执行 decode()。 (作为一般提示,顺便说一句,decode_utf8() 要快得多!)

至于另一个问题,您可能需要比较您的 Apache 服务器配置以查看是否 AddDefaultCharset设置为一些无用的值。

另请参阅 my talk at last year's London Perl Workshop更详细地了解 Perl 和 Unicode。

关于mysql - Perl UTF8 CGI 和 DBI ... 正确的工作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680722/

相关文章:

c# - 带有 JOIN 和 WHERE 子句的 SQL SELECT - 从两个表中选择一条记录

arrays - 为什么 Time::HiRes::stat 打破列表下标?

perl - 为什么 Perl 的 "system (' 某些命令')"与 c :\> some command? 的行为不同

python - 为什么这个土耳其字符在我小写时会被损坏?

强制 wchar_t 为 4 个字节

php - 在 php 中执行 mysql_query 时出现拒绝访问错误

mysql - 如何仅在mysql中按名称和运行日期分组

mysql - 如何从两个以上的表中收集数据并将结果放入新表中

linux - 在perl中更改终端输出的字体大小

ruby-on-rails - rails 应用程序如何接受 url 中的非字母数字字符?