Perl抓取脚本无法识别某些字符

时间:2012-11-24 11:02:11

标签: perl mojolicious

我有一个在本地工作正常但在服务器上失败的脚本。

显示不间断的空格符号

   

as

?

打印到标准输出时。

在解析页面时,如果我尝试用

去除非破坏空格符号
s/\&nbsp\;//g

没有任何反应,也没有摆脱问号

s/\?//g

似乎无论如何都坚持下去。

Bizzarely,在本地运行脚本时这不是问题。

但是,本地计算机和服务器上的一个问题是撇号(在HTML中表示我正在抓取一个急性符号

´

始终表示为问号

?

即使明确尝试

s/´/'/g

困惑,请帮助。

2 个答案:

答案 0 :(得分:2)

会尝试将其删除:

不间断空间

my $non_break_space = "\x{A0}";
$non_break_space =~ s/\xA0/ /g;

急性重音

my $acute = "\x{B4}";
$acute =~ s/\xB4/ /g;

您可以使用此网站fileformat.info获取有关unicode字符及其不同值的更多信息。

答案 1 :(得分:0)

由于您使用标记了问题,我假设您正在使用Mojolicious。尝试在您的服务器上运行此测试脚本并向我们显示结果:

#!/usr/bin/env perl

use utf8;
use Mojolicious::Lite;
use Test::More tests => 3;
use Test::Mojo;

get '/test_html' => {text => "<p>Hello&nbsp;&nbsp;World&acute;!</p>"};
my $t = Test::Mojo->new;

$t->get_ok('/test_html')->status_is(200)->text_is('p', 'Hello World´!');

在这里工作正常:

1..3
ok 1 - get /test_html
ok 2 - 200 OK
ok 3 - exact match for selector "p"