電子書籍の厳選無料作品が豊富!

さらに調べていたのですが、どうやら登録されているURLのデータに「=」が含まれていると
上手くいかないことが解りました。

以下のスクリプトで保存及び抽出データに「=」が含まれていても上手く処理する方法は無いでしょうか。

#*****************************************************************************
sub plink{
#パーソナルリンク
&error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink);

my ($a1,$a2,$a3,%temphash);
for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){
($a2,$a3) = split(/=/,$a1);
$a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
if ($a2 eq 'plink_list'){
foreach(split(/<>/,$a3)){
$temphash{$_}=1;
}
last;
}
}

&filelock("linkdata");
open (IN,"$linkdata");
while(<IN>){
if ($temphash{(split(/<>/,$_))[15]}){
$totalct++;
push(@site,$_) if ($totalct >= $startnum) && ($totalct <= $endnum);
}
}
close (IN);
&fileunlock("linkdata");

$endnum = $totalct if $totalct < $endnum;
$startnum = 0 if $totalct == 0;

$action = "パーソ\ナルリンク";
&searchbar("","<option value=\"\" selected>$searchtitle\n");
&databar();

if ($totalct != 0){
$resultmessage = "$totalct件のリンクが登録されています。<br /><br />";
&linkbar("act=$act&line=$line&indi=$indi");
&siteindicate("",@site);
}else{
$resultmessage = "登録が無いか、クッキーが有効になっていません。<br /><br />";
$linkbar = $siteindicate = "";
}

&html_output;
}
#*****************************************************************************
sub plink_add{
#パーソナルリンク追加
&error("現在、パーソ\ナルリンクは使用出来ません。") if !($personallink);
&get_cookie;
$plink_list.=$url."<>" if $plink_list !~ /\Q$url\E/;
&set_cookie;
&searchbar("","<option value=\"\" selected>$searchtitle\n");
$linkbar = $siteindicate = "";
$action = "パーソ\ナルリンク追加";
$resultmessage = "<b>".&sitename_get."</b> をパーソ\ナルリンクに追加しました。<br />";
&html_output;
}
#*****************************************************************************
sub get_cookie{
#クッキー取得
my ($a1,$a2,$a3);
for $a1(split(/; */,$ENV{'HTTP_COOKIE'})){
($a2,$a3) = split(/=/,$a1);
$a3 =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
if ($a2 eq 'plink_list'){
$plink_list = $a3;
last;
}
}
}
#******************************************************************************
sub set_cookie{
#クッキー設定
$plist_link =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
print "Set-Cookie:plink_list=$plink_list; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
}
#****************************************************************************

宜しくお願い致します。

A 回答 (1件)

サイトを運営するってなら


自分で保守すべきだと思うのだが・・・

>以下のスクリプトで保存及び抽出データに「=」が含まれていても上手く処理する方法は無いでしょうか。


みてわかるように,セットしたCookieが項目の区切りとして
「=」を使ってて,それを解読するのに「=」でsplitしてるから
URLに「=」があれば誤動作するのは自然なこと.
#ついでにいうとexpireの日付が決めうちなのも個人的には・・・

だから区切りにURLでは使わないものを使って
それでsplitすればいいんでしょう.
セットするCookieのデータ構造を考え直すしかないんでは?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

その後、さらに調査していたのですが、登録URLデータに記号の「=」及び「&」が
含まれる場合に不具合が発生することが解りました。

取り敢えずの応急処置として、上記の場合にはパーソナルリンクを
使用できないようにして対応しました。

ありがとうございました。

お礼日時:2011/07/18 15:51

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