我从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];
}
答案 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>
祝你好运。