转义数据库插入和使用perl获取拉丁字符

时间:2015-05-28 14:42:21

标签: mysql perl dbi

我从html文本区域输入一个音符值为“£”并提交。并尝试使用以下代码插入数据库,但它从UI获取一些垃圾值并显示也显示垃圾值,例如:如果我从文本区域输入£,它将作为£。请告诉我如何解决这个问题。

#!/usr/local/perl-5.20.1/bin/perl
use HTML::Entities;
my $str= $cgi->param('note');
$str=HTML::Entities::encode($str);
my $sth = $dbh->prepare("INSERT INTO notes VALUES (null,'FD',?,?)");
$sth->execute('1','2',time(),$str);

my $sth = $dbh->prepare("SELECT ATTuid, noteDate, content FROM notes WHERE requestType = ? AND requestID = ? ORDER BY noteDate ".$order);
$sth->execute('1','2');
if ($sth->rows() > 0) {
while (my @temp = $sth->fetchrow_array()) {
$temp[2] =~ s|'|\\'|g;
$html = '<br/>'.$temp[2];
}

2 个答案:

答案 0 :(得分:4)

这似乎与应用程序或HTML页面与底层数据库服务器之间可能的字符集不匹配有关的问题,我建议你使用双方的UTF-8编码。

在网页中(如果这是您所拥有的)应该以:

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

在MySQL服务器的my.cnf中:

init_connect = 'SET NAMES utf8' 

或来自perl:

$dbh->do( "set names utf8" );

或建立连接时:

my $dbh = DBI->connect(
    "dbi:mysql:dbname=db_name", 
    "db_user", "db_pass",
     {RaiseError => 0, PrintError => 0, mysql_enable_utf8 => 1}
 ) or die "Connect to database failed.";

答案 1 :(得分:2)

您应该ensure MySQL is set to use utf-8并在准备之前添加以下内容:

$dbh->do("SET NAMES 'utf8'");

希望有所帮助...如果您有其他问题,请发表评论。

根据评论,您现在需要在头部区域中设置HTML meta tag来设置文本编码:

<html>
<head>
<meta charset="UTF-8">
<!-- rest goes here -->
</html>

祝你好运。