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

関係者のみのページから特定のページにリンクさせる際に
ダミーのリファーを飛ばしてリンクするシステムを作っています。

link.php の内容(EUC)
<?

$url = $_GET['url'];

?>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<html>
<body>
下のURLへリンクします。よろしければクリックしてください。<BR>
<a href="<? echo $url; ?>"><? echo $url; ?></a>
</body>
</html>

このスクリプトを引数url http://search.yahoo.co.jp/search?p=%E4%BB%8A%E6% … (URLエンコードされた文字列)を与えて起動すると
URLエンコードされた部分が文字化けしてしまいます。
渡された引数をそっくりそのまま表示し文字化けさせずに表示させることはできないのでしょうか。

A 回答 (4件)

以下,サンプルです。

もう少しスマートなやり方があるかもしれませんが、それは専門家の方に(?・・)ル(^^*)ノ タッチw
<?php

$url = $_GET['url'];

// ?で分割
list($urlbase, $initarg) = explode("?", $url);
// =で分割
list($param, $value) = explode("=", $initarg);
// URLエンコード
$value = urlencode($value);
// 分岐先生成
$jumpto = $urlbase . "?" . $param . "=" . $value;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</head>
<body>
<br>
下のURLへリンクします。よろしければクリックしてください。<BR>
<a href="<?php print $jumpto; ?>"><?php print $url; ?></a>
</body>
</html>
    • good
    • 0
この回答へのお礼

リンク文字列が文字化けしてしまうので
合体させて下記の落ち着いたとおもったんですが、
1番目の引数しか処理されないですねぇ。
2番目にエンコード対象があると処理されません。
難しいですが、いくつかヒントを頂けましたので
頑張ってみます。
ありがとうございました。

<?php

$url = $_GET['url'];

// ?で分割
list($urlbase, $initarg) = explode("?", $url);
// =で分割
list($param, $value) = explode("=", $initarg);
// URLエンコード
$value = urlencode($value);
// 分岐先生成
$jumpto = $urlbase . "?" . $param . "=" . $value;

$disp = mb_convert_encoding(urldecode($url),"EUC-JP","UTF-8");

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</head>
<body>
<br>
下のURLへリンクします。よろしければクリックしてください。<BR>
<a href="<?php print $jumpto; ?>"><?php print $disp; ?></a>
</body>
</html>

お礼日時:2006/01/12 18:00

urlが不特定の時には、


先ほども書いたように、parse()関数を使用するか、?記号で引数を分割して、後者をURLエンコードすればいいと思います。
    • good
    • 0

<?


$url = $_GET['url'];
$disp = mb_convert_encoding(urldecode($url),"EUC-JP","UTF-8");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</head>
<body>
下のURLへリンクします。よろしければクリックしてください。<BR>
<a href="<?php print $url; ?>"><?php print $disp; ?></a>
</body>
</html>
----------------------------------------------------------------
というようなことでしょうか?
勘違いしてたらすみません。

この回答への補足

この場合は$urlが文字化けしてしまいます。
なかなか難しいですねぇ。

補足日時:2006/01/12 17:52
    • good
    • 0

url部分と、引数部分(?から後ろ)を分けてやれば以下のように文字化けしません。



<?php

$url = $_GET['url'];
$arg = $_GET['arg'];

$jumpto = sprintf("%s?p=%s", $url, urlencode($arg));
$jumptolist = sprintf("%s?p=%s", $url, $arg);

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
</head>
<body>
下のURLへリンクします。よろしければクリックしてください。<BR>
<a href="<?php print $jumpto; ?>"><?php print $jumptolist; ?></a>
</body>
</html>

urlを一括指定するときには、parse_url()を使用して、プログラム側で再構成してあげればいいかと思います。

参考URL:http://jp.php.net/manual/ja/function.parse-url.php

この回答への補足

引数に渡されるURLは不特定多数のものですので常にp=で来るとは限りません。
エンコードされた部分のみを処理することはできないのでしょうか。

説明の仕方が悪かったと思います。
本当に申し訳ありません。

補足日時:2006/01/10 16:54
    • good
    • 0

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