アプリ版:「スタンプのみでお礼する」機能のリリースについて

ネットで無料配布されているAmigodatabaseというPerlで、データベースのサイトを作っております。

以下は、データベースの結果一覧を出力するための、default.htmlというページのソースの一部です。


print <<"<!---HTML--->";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="ja"><HEAD>
<link rel="canonical" href="$FORM{$SEARCH{1}{Name}}.htm">
(中略)
<META name="description" content="$FORM{$SEARCH{1}{Name}} の名産果物です">
<TITLE>$FORM{$SEARCH{1}{Name}} の果物</TITLE>




上記、$FORM{$SEARCH{1}{Name}}には、

検索した際に使ったキーワードが表示自動挿入されます。

このキーワードが、例えば「りんご」だった場合に、

URLエンコードを行って、「%e3%82%8a%e3%82%93%e3%81%94」と

上記、<link rel="canonical" href="$FORM{$SEARCH{1}{Name}}">の

$FORM{$SEARCH{1}{Name}}を、%e3%82%8a%e3%82%93%e3%81%94として、

つまり、<link rel="canonical" href="%e3%82%8a%e3%82%93%e3%81%94.htm">

としたいのですが、どのようなソースを書けば、実現できるのでしょうか?

どうかアドバイスのほど、よろしくお願い致します。m(_ _)m

A 回答 (1件)

uri_escape()を使いましょう。


ちなみに、canonicalは相対パス指定もできますが、間違いがないように絶対パスで指定したほうがいいと思います。
また、フォームの入力をそのまま使っていますが、XSS対策のために、ここもエンコードするべきです。
やり方は、いろいろあるので、探してみてください。


use URI::Escape;

my $escape_str = uri_escape($FORM{$SEARCH{1}{Name}});
my $canonical_url = "http://foobar.baz/$escape_str.htm";

print <<"<!---HTML--->";
(中略)
<link rel="canonical" href="$canonical_url">
(以下略)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!