タイムマシーンがあったら、過去と未来どちらに行く?

初めて投稿させていただきます。
文字列置換について、色々と調べたのですが全く解決しなかったのでこの場を借りてご質問させて頂きます。
早速ですが記述から記載させて頂きます。

$str = file_get_contents('http://example.com/');
$replaced = str_replace("index.php?ref=123abc", "index.php?ref=456def", $str);
echo $replaced;

このように一定の文字列に対しては置換ができたのですが、
index.php?ref=123abc
の箇所が
index.php?ref=123abc&PHPSESSID=qazwsxedcrfvtgbyhnujmikolpqazwsx
のようにPHPSESSIDのセッションID(毎回変わるランダムな32桁の文字列)が付いてきた場合に
index.php?ref=456def
に置換える方法がわかりません。
&PHPSESSIDの文字列の先頭部分から右に43文字目※(&PHPSESSID=の所で11文字)+(IDの所で32文字)※までを
index.php?ref=456def
に置き換える方法や
初めからPHPSESSIDのセッションIDの部分を表示させない方法など
ここ数週間色々考えてみましたがどうしてもわかりませんでした。
PHP初心者ですので、なるべくわかりやすく教えて頂けると幸いです。
よろしくお願いいたします。

A 回答 (1件)

> 毎回変わるランダムな32桁の文字列



正規表現を使えば可能だけど、もう少し正確に

if (function_exists('http_build_url')) { // pecl_http 0.21.0 +
function http_build_url($url=null ,$parts=null, $flags=HTTP_URL_REPLACE, &$new_url) {
...
}
}

$uri = 'index.php?ref=123abc&PHPSESSID=qazwsxedcrfvtgbyhnujmikolpqazwsx';

$parts = parse_url($url);
$http_query = pase_str($parts['query']);

var_dump($http_query['PHPSESSID']);

if ($http_query['ref'] == '123abc' ) {
$http_query['ref'] = '456def';
$parts['query'] = http_build_query($http_query, null, '&');
$url = http_build_url(null, $parts);
}

もしくは、やや雑になるけど
$target_value = preg_quote(urlencode('123abc'), '/');
$url = preg_replace("/(?<=(?:\?|&)ref=){$target_value}(?=&|#|$)/", urlencode('456def'), $url);

他のレスに書いてきたばかりなので興ざめかもしれないけど、
$url の取得は自分なら XPath を利用する。

文字列中に埋め込まれたものなら、正規表現

この回答への補足

yuu_xさんへ
あれからようやく解決致しました。
strposとsubstrを使用しての方法です。
PHPSESSIDという文字列の先頭から、右側へ指定した文字数分(43文字)の文字列を削除するといった方法です。
幸いにもPHPSESSIDが32文字と一定だったのでこの方法でOKでした。
他の方法を教えてくださりありがとうございました。

補足日時:2011/01/19 11:23
    • good
    • 0
この回答へのお礼

おはようございます。yuu_xさん即答ありがとうございます。
失礼ながらまだ具体的なソースをあげてませんでしたね。
file_get_contentsで取得した外部ファイルには以下のようにリンクが並んでます。

⇒<A href="/ad.php?com=detail&id_i=XXXXX&PHPSESSID=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY">タイトル</A><BR>

⇒<A href="/ad.php?com=detail&id_i=XXXXX&PHPSESSID=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY">タイトル2</A><BR>

⇒<A href="/ad.php?com=detail&id_i=XXXXX&PHPSESSID=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY">タイトル3</A><BR>

※Xは5桁の数字
※Yは32桁の英数字
※XとYはいずれも毎回変わる

このリンクの
<A href="/ad.php?com=detail&id_i=XXXXX&PHPSESSID=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY">

<A href="/ad.php?iid=XXXXX&aid=12345&pfg=1">
と置換えたいと思ってます。

携帯用のサイトなので出来ればソースも少なく処理が早いもので表示させたいです。
いかがでしょうか?

お礼日時:2011/01/19 09:26

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


おすすめ情報