我对用于处理utf8的Perl设置感到困惑:
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});我读到,我应该在以这种方式建立db连接之后立即发出它们:
my $db = DBI->connect($cstring, $user, $password);
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});以下是问题所在:
1)-I具有表单设置为utf8的网页,因此用户数据以utf8的形式发送给脚本。
2)-the脚本使用CGI::Simple读取表单数据。我是应该用utf8::decode()解码表单数据,还是只留下它?
3)-Should --我设置了这两种方法:
$db->{mysql_enable_utf8} = 1
$db->do(qq{SET NAMES utf8});我希望有人能解释保存和读取utf8的步骤,从将网页上的用户输入到MySQL数据库开始。
发布于 2014-12-24 12:58:42
我做了一些测试,这些测试可能有助于回答问题的一部分。
考虑一下utf8阿拉伯语中的这个变量:
my $string = "السلام عليكم";根据这个uft8计数器:
https://mothereff.in/byte-counter
它是12个字符,总计23个字节。
这两种说法
$strlen = length(($string));
say $strlen;
$strlen = length(decode_utf8($string));
say $strlen;打印12,所以Perl知道它是utf-8字符,因为我使用use utf8;告诉perl我的源代码是用utf-8编码的。这相当于解码您的CGI输入。
下面是Mysql:
1)-我创建了具有属性的测试表:
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci2)-连接到mysql db后,将这两者设置为:
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');当我在MySQL中看到表时,我看到它被存储为正确的阿拉伯语和总共23个字节,并且我可以将文本读取为。
السلام عليكم3)-但不设定这两种情况:
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');当我在MySQL中看到表时,我会看到错误编码的数据总计50个字节。
السلام عليكم我在Windows上使用Perl 5.10。
这意味着我们必须设置这两个设置,以便在连接后立即使用mysql正确存储和检索utf8数据:
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');我认为这在一定程度上解决了从mysql存储和检索数据的问题,但是关于从从表单接收数据开始处理数据的其余问题应该先解码或按原样使用。

https://stackoverflow.com/questions/27629041
复制相似问题