みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

canonicalのURLエンコードについて

ネットで無料配布されている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

投稿日時 - 2014-01-08 08:19:07

QNo.8420003

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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">
(以下略)

投稿日時 - 2014-02-04 11:03:24

あなたにオススメの質問