2015-05-28 42 views
1

我從html文本區域輸入一個註釋值爲「£」並提交。並嘗試使用以下代碼插入到數據庫中,但它從UI中獲取一些垃圾值並顯示垃圾值,例如:如果我從文本區域輸入£,它將以£的形式出現。請告訴我如何解決這個問題。用於DB插入和使用perl抓取的拉丁字符

#!/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

您是否配置了$ dbh以UTF-8或其他編碼進行通信? – choroba

+1

[編碼像英鎊(英鎊)拉丁字符的編碼使用Perl腳本編碼後拋出垃圾值](http://stackoverflow.com/questions/30392557/encoding-of-latin-characters-like-%c2% a3-pound-is-throwing-junk-value-after-encodin) – ThisSuitIsBlackNot

+2

請不要多次詢問[同一問題](http://stackoverflow.com/q/30392557/176646)(這是第三個) 。即使您還沒有解決您的問題,您已經接受了第一個問題的答案。不要再次提出同樣的問題,請編輯您的原始帖子以澄清問題並解答留言者留下的問題。您可以通過使用「@用戶名」進行回覆來通知評論人員,例如, '@ ThisSuitIsBlackNot'。除非您的問題得到解決,否則不要接受答案。如果你還沒有得到滿意的答案,你可以發佈賞金來獲得更多的關注。 – ThisSuitIsBlackNot

回答

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> 

祝您好運給你。

+0

@ hd1,非常感謝,我在腳本中添加了上述內容,'£'正確插入。但是在獲取顯示在文本區域中的相同數據時,顯示爲£ – user3829086

+1

這是一個單獨的問題,但強制將HTML中的內容類型轉換爲utf-8應該對您進行排序。請參閱我的編輯。 – hd1

+0

在將拉丁文chatacter數據插入到數據庫中時,我們需要在腳本中使用utf8添加以下行; 使用HTML :: Entities; $ dbh-> do(「SET NAMES'utf8'」); 在獲取數據時,我們需要在獲取數據之前添加這一行$ dbh-> do(「SET NAMES'latin1'」); – user3829086

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.";