0

私はいくつかのhtmlを解析しています:

use Modern::Perl;
use Mojo::DOM;
use strict;
use DBI;
use DBD::mysql;
use utf8::all;

my $dbh = DBI->connect("DBI:mysql:db_name", "db_username") or die ("Error:  
$DBI::errstr");

my $html = do { local $/; <DATA> };
my $dom = Mojo::DOM->new($html);
my $text = $dom->all_text;
say $text;

my ($var1, $var2, $var3);  #normally have values assigned, but not relevant to example

#write $text to MySQL database 
$dbh->do("INSERT INTO table_name VALUES (?,?,?,?)",
                            undef,
$var1, $var2, $var3, $text
);


__DATA__
<div class="field-content"><p>&nbsp;</p>
<p>Here is some data with a trademark html symbol SUPER PRODUCT&trade;, featuring curved
LCD screen.</p></div>

解析されたテキストを標準出力に書き込むと、次のようになります。

Here is some data with a trademark html symbol SUPER PRODUCT™, featuring curved LCD 
screen.

すべて問題なく、これは MySQL に書き込まれます。ただし、MySQL 内で、および MySQL からデータを抽出すると、次のようになります。

Here is some data with a trademark html symbol SUPER PRODUCTâ„¢, featuring curved LCD
screen.

これは Unicode に関係しているのではないかと疑ったので、MySQL のステータス設定を変更しようとしましたが、それでも満足できませんでした。これを適切に解決する方法は?

4

1 に答える 1

2

この文

#write $text to MySQL database 

多くの重要な詳細を詳しく説明し、データベースからテキストを読み取る方法を説明するコードを含めなかったため、正しく理解するのが難しい場合もあります。

データベース内のテキストはUTF-8でエンコードされていると推測してみましょう。次に、そのデータベース列から出てくるすべてのコンテンツをデコードする必要があります。

use Encode;
$decoded_text = Encode::decode("utf-8", $raw_text);

# since you 'use utf8::all', this will get re-encoded to UTF-8 when you write
# it to standard output ...
print "decoded text is $decoded_text\n";
于 2013-02-04T19:19:10.470 に答える