1

「%xx」の形式で表される多くの Unicode 文字を含む Web ページからコンテンツを抽出するつもりでした。Perl モジュール LWP を使用して Web ページを取得したため、これらの Unicode 文字は Perl Regex を使用して以下のように自然に処理されました。

my $html = "%20%26%40 ";
$html =~ s#%([0-9a-f]+)#\x{\1}#ig;
print "$html\n";

しかし、上記のコードは動作せず、"00" しか出力しません。今行き詰まります...ヒントをいただければ幸いです。

ありがとう、イェ

4

4 に答える 4

8

Perl にはURI::Escape、このための関数が既にモジュールに組み込まれています。正規表現をいじる必要はありません

use URI::Escape;
my $encode = uri_unescape($string);

詳しくはこちらのページをご覧ください

于 2012-08-27T14:56:40.397 に答える
2

実行可能な置換が必要です

$html =~ s/%([0-9a-f]+)/chr hex $1/ieg;

URI::EscapeGisle Aas の優れた LWP スイートの一部であるモジュールを使用することをお勧めします。

于 2012-08-27T15:05:12.493 に答える
0

まず、これは HTML とは関係ありません。そのエスケープ メカニズムは URI によって使用されます。

あなたがそれをしなければならないのは本当に奇妙に思えます。通常、そのエンコーディングを元に戻す必要があるのは、パラメーターを受け取る CGI スクリプトだけです。

use CGI;
my $cgi = CGI->new();
my $foo = $cgi->param('foo');

しかし、独自の URI 解析を行う必要があるとしましょう。あなたが使用することができます:

use URI;
my %form = URI->new($url)->query_form();
my $foo = $form{'foo'};

CGIURI

于 2012-08-27T15:46:50.237 に答える
-1

面白くて醜いコード:

my $html = "%20%26%40 ";
$html =~ s#%([0-9a-f]{2})#"chr(0x$1)"#igee;
print "$html\n";

編集:(私は言う義務があります)このコードはおそらくかわいいですが、本番環境では使用しないでください!(うまくいかない場合も多い)

于 2012-08-27T14:57:23.630 に答える