/ / Perl an MySQL-HTML-Text - HTML, MySQL, Perl, Unicode

Perl zu MySQL HTML-Text - HTML, MySQL, Perl, Unicode

Ich analysiere einige HTML-Dateien:

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>

Wenn Sie den geparsten Text in die Standardausgabe schreiben, erhalten Sie Folgendes:

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

Alles ist gut und das ist in MySQL geschrieben. In MySQL und beim Extrahieren der Daten aus MySQL erhalten wir jedoch Folgendes:

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

Ich vermutete, dass dies mit Unicode zu tun hatte, versuchte also, die MySQL-Statuseinstellungen zu ändern, aber immer noch keine Freude. Wie löse ich das richtig?

Antworten:

2 für die Antwort № 1

Diese Aussage

#write $text to MySQL database

Beschreibt viele wichtige Details, und Sie haben nicht den Code eingefügt, der beschreibt, wie Sie Text aus der Datenbank lesen.

Lassen Sie mich wissen, dass der Text in Ihrer Datenbank utf-8-codiert ist. Dann sollten Sie alle Inhalte dekodieren, die aus dieser Datenbankspalte stammen:

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