初めて投稿させていただきます。
文字列置換について、色々と調べたのですが全く解決しなかったのでこの場を借りてご質問させて頂きます。
早速ですが記述から記載させて頂きます。
$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初心者ですので、なるべくわかりやすく教えて頂けると幸いです。
よろしくお願いいたします。
No.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でした。
他の方法を教えてくださりありがとうございました。
おはようございます。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">
と置換えたいと思ってます。
携帯用のサイトなので出来ればソースも少なく処理が早いもので表示させたいです。
いかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
フォームで戻った際に入力済み...
-
<span>を<div>に変更すると S...
-
BASIC認証のフォームをデザイン...
-
PHPのエラーの解消法について教...
-
配列について教えて下さい。
-
PHPでCSVを出力するさいに、ル...
-
クエリObjectをforeachで回す時...
-
awsにApacheとPHPを入れて、何...
-
どうして送信されないのでしょ...
-
php エラー
-
PHP MySql 画像を取得
-
htmlのエラーについて(デバッグ)
-
PHPでテキストファイルに保存し...
-
プログラムコードを入力する場...
-
空文字 "" ですが 空文字の意味...
-
10文字以降は非表示にしたいん...
-
isset — 変数が宣言されている...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php文字列中のシングルクオート...
-
終端識別子 とは?
-
PHPでPが2個あるので分かりず...
-
is_callable()の第二引数の使い方
-
0dで始まる文字列の比較がうま...
-
検索に関する文字コード
-
printが「ダブルスタンダード」...
-
PHPにおいて16進数のアスキー文...
-
blob型のデータの変換について
-
php 言語について
-
文字列比較の演算子
-
【比較演算子】偶数・奇数識別...
-
文字列を%+2桁のヘキサ
-
PHP4から5への移行に伴うFatal ...
-
if ('0.0'=='0'){ の0.0とは何
-
header(Location: next.php) だ...
-
PHPのif文でその処理を途中で抜...
-
フォントの色を変えるには?
-
FTPコマンドでディレクトリごと...
-
onedrive にexcelファイルをア...
おすすめ情報