/ / Perl a MySQL html text - html, mysql, perl, unicode

Texto html Perl to MySQL - html, mysql, perl, unicode

Estoy analizando algunos html así:

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>

Escribir el texto analizado en la salida estándar produce lo siguiente:

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

Todo está bien y esto está escrito en MySQL. Sin embargo, dentro de MySQL y al extraer los datos de MySQL obtenemos esto:

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

Sospeché que esto tenía que ver con Unicode, así que intenté cambiar la configuración de estado de MySQL, pero aún no me alegro. ¿Cómo resolver esto correctamente?

Respuestas

2 para la respuesta № 1

Esta declaración

#write $text to MySQL database

pasa por alto muchos detalles importantes, y no incluyó el código que describe cómo leer el texto de la base de datos, lo que también puede ser difícil de entender.

Permítame adivinar que el texto de su base de datos está codificado en utf-8. Luego querrá decodificar todo el contenido que sale de esa columna de la base de datos:

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