-1

私の Perl プログラムでは、暗号化された電子メールを取得し、それをデコードしてさらに処理しています。データに次のものが含まれているため、問題に直面して%localappdata% います。データがメールボックスから取得されているため、qw() 関数を直接使用できませんでした。この機能を適用する方法はありますか?特殊文字が特殊文字ではなく通常の文字として認識されるようにするにはどうすればよいですか? またはそうするための正規表現はありますか?

更新:私が行っている処理は、データを HTML に変換し、Curl を使用して REST API に送信することです。

更新 2: コードは次のとおりです: https://gist.github.com/8cd801fedeb90a5ca7fc $descriptionには含まれています%localappdata%

4

2 に答える 2

2

完全なコードを表示していただきありがとうございます。問題は、コンテンツを$bodyURL パラメータとして渡していることです。そのため、HTTP プロトコルでは、それらを適切に渡すためにさまざまな文字をエスケープする必要があります。

モジュールを使用してこれを実現でき、URI::Escape125 行目以降の行で行っているサニタイズを行う必要がなくなります# clean the body

このプログラムは、特定したすべての問題文字を含む文字列を使用し、モジュールを使用して翻訳します。Curl の URL に追加する前uri_escapeに のコンテンツを使用すると、すべてが機能するはずです。$body

use strict;
use warnings;

use URI::Escape 'uri_escape';

my $body = '%localappdata% â & ';

print uri_escape $body;

出力

%25localappdata%25%20%E2%20%26%20

アップデート

一般的に URL を操作するには、URL のパスとクエリ部分の両方で必要なすべてのエスケープを行うURIモジュールを使用するのが最善です。

$curl->setopt以下のプログラムは、このメソッドを使用して渡す必要がある URL を生成する方法を示しています。

use strict;
use warnings;

use URI;

my $url = URI->new('https://this/is/the/url');
my $body = '%localappdata% â & ';

$url->query_form(body => $body);
print $url, "\n";

出力

https://this/is/the/url?body=%25localappdata%25+%E2+%26+

(この方法では空白文字+の代わりに使用することに注意してください%20。どちらも URL のクエリ部分で受け入れられます。)

この URL は、次のように記述して Curl オプションとして直接設定できます。

$curl->setopt(CURLOPT_URL, $url);
于 2012-07-13T17:41:17.770 に答える
-1

何かをエスケープするには、正規表現を使用してデータを処理します。

my $email = "To: foo@example.com\n\nHi Rad,\nI just opened %appdata% and...";
$email =~ s/ % /\\%/xg; # escapes all percent signs

これは に置き換え%appdata%られ\%appdata\%ます。API がその入力データをどのように好むかわかりません。それに応じて調整してください。

編集: スカラー $description を URL に入れます (Git の 30 行目と 41 行目)! パーセント記号はエスケープ文字です! したがって、s/%/%%/g任意の URL に入れた任意のデータを処理するだけで、いつまでも幸せに過ごせます :)

于 2012-07-13T15:56:07.950 に答える