• ベストアンサー

[PHP]条件分岐について

PHPで外部サイトに飛ぶときのクッションページを作成しているのですが、飛んできたリンクによってページ本文の文字出力を変更する事 って出来ませんか? $_SERVER['HTTP_REFERER']; を使うまではわかっています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

失礼しました。 >> "飛んできたリンクによって" ページ本文の文字出力を変更する事 $_SERVER['HTTP_REFERER'] はここで使うんですね。但し直アクセスされた場合にはこれは未定義となるので、最初に isset($_SERVER['HTTP_REFERER']) でセットされているかどうかの確認を行った上で条件分岐を行ってください。 if (!isset($_SERVER['HTTP_REFERER'])) { $p = '...'; } elseif (preg_match('...', $_SERVER['HTTP_REFERER'])) { $p = '...'; } elseif (preg_match('...', $_SERVER['HTTP_REFERER'])) { $p = '...'; } elseif (preg_match('...', $_SERVER['HTTP_REFERER'])) { $p = '...'; } else { $p = '...'; }

その他の回答 (1)

noname#244856
noname#244856
回答No.1

>> $_SERVER['HTTP_REFERER']; を使うまではわかっています。 えっと…単に $_GET['url'] のようにクエリで受け取って、普通にif文使うだけでは…?リファラーって関係あるんでしょうか。受け取りたい情報はクッションページからの「ジャンプ先」のURLであり、クッションページに飛んできた「ジャンプ元」のURLなんてどうでもいいですよね。 <?php if (isset($_GET['url']) && is_string($_GET['url']) && preg_match('@\Ahttps?+://@i', $_GET['url'])) { $p = sprintf('<a href="%1$s">%1$s</a>', htmlspecialchars($_GET['url'], ENT_QUOTES, 'UTF-8')); } else { $p = 'URLが無効です'; } header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTPYE html> <html> <head> <title>クッションページ</title> </head> <body> <p><?=$p?></p> </body> </html> 【ポイント】 1. isset($_GET['url']) で「xxx.php?」の後ろに「url」が存在しない場合に対処 2. is_string($_GET['url']) で「xxx.php?url[]=...」のように配列で渡されてきた場合に対処 3. preg_match関数を使ってURLが「javascript:」から始まるXSS攻撃に対処(4.だけでは防ぎきれないので) 4. htmlspecialchars関数で「<」「>」「&」「"」「'」をエスケープ 必要があれば3.の後に更に場合分けするなりどうぞ。 場合によっては「制御構造に関する別の構文」を使ったほうが見やすくなることも。 制御構造に関する別の構文 http://www.php.net/manual/ja/control-structures.alternative-syntax.php

関連するQ&A