08/02/11 11:28:03
>>397
答えそのものは書かないけど、以下のことが必要。
'\[google:\w+\]'の部分は'\[google:(\w+)\]'でしょうね。そうしないと
$1で受け取れないから。
置換をするなら、
$input_str =~ s/$key/conv($1, $hash{$key})/eg;
などとしておいて、
sub conv {
my ($word, $str) = @_;
$str =~ s/\$1/$word/g;
$str;
}
などとでもしておくとか。
で、
URLのクエリー部分に仕込む文字列はURIエスケープが必要。
そんで、マルチバイトの場合、どの文字コードにしてからエスケープするかも
考える必要あり。
さらに、<a>と</a>の間の文字列に使用するときはサニタイズ処理が必要(XSS対策)。
>>398 の方法だと、perlコードをそのまま解釈してしまうので、別の危険あり。
「与えられた文字列」は誰が与えるのかがとても大きな問題です。
URLにリンクを張るのは、大崎氏のPerlメモが使えると思います。