phpに関する質問です。

str_replaceを使って置換をしたいと思うのですが、
IMG SRC="/test"

IMG SRC="http://example.com/test"
と置換したい場合、どのように記述すればよいのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2006/03/29 13:57:15
  • 終了:2006/03/29 17:20:50

回答(3件)

id:pxb12663 No.1

pxb12663回答回数395ベストアンサー獲得回数142006/03/29 14:13:43

ポイント25pt

print str_replace('/test','http://example.com/test',

'IMG SRC="/test"')

でいいのではないでしょうか?

id:kato-s No.2

kato-s回答回数91ベストアンサー獲得回数32006/03/29 14:24:20

ポイント25pt

以下のコードで動作確認しました。PHP5です。

$str = "IMG SRC=\"/test\"";

$from = "/test";

$to = "http://example.com/test";

$str = str_replace($from, $to, $str);

?>

<html>

<head><title>test</title></head>

<body></body>

</html>

id:aki73ix No.3

aki73ix回答回数5224ベストアンサー獲得回数272006/03/29 16:11:58

ポイント35pt

ならば、

$url1 = str_replace(' SRC="/',' SRC="http://example.com/',$url1); // 先頭が /の場合はルールに従う

のようにすればよいと思います

<?php

$url1 = '<IMG SRC="/test"><BR>

<IMG SRC="sample.htm"><BR>

<IMG SRC="/test/sample.htm"><BR>

<IMG SRC="//example.com/sample.htm"><BR>

';

$url1 = str_replace(' SRC="//',' SRC="http://',$url1);             // 先頭が //の場合はhttp:を補う

$url1 = str_replace(' SRC="/',' SRC="http://example.com/',$url1);  // 先頭が /の場合はルールに従う

print $url1;

?>

【元の文章】

<IMG SRC="/test"><BR>

<IMG SRC="sample.htm"><BR>

<IMG SRC="/test/sample.htm"><BR>

<IMG SRC="//example.com/sample.htm"><BR>

【変換後】

<IMG SRC="http://example.com/test"><BR>

<IMG SRC="sample.htm"><BR>

<IMG SRC="http://example.com/test/sample.htm"><BR>

<IMG SRC="http://example.com/sample.htm"><BR>


ただ、この場合

IMG SRC="test.htm"のような場合はこの時変換されません

この場合はpreg_replaceを使い、次のように変更します

http://www.yc.musashi-tech.ac.jp/~yamada/doc/php/0411.html (参考)

<?php

$url1 = '<IMG SRC="/test"><BR>

<IMG SRC="sample.htm"><BR>

<IMG SRC="/test/sample.htm"><BR>

<IMG SRC="//example.com/sample.htm"><BR>

';

$url1 = str_replace(' SRC="//',' SRC="http://',$url1);             // 先頭が //の場合はhttp:を補う

$url1 = str_replace(' SRC="http://example.com/',' SRC="/',$url1);  // 既に代入されている場合は一度戻す

$url1 = preg_replace('/( SRC=¥")([a-z0-9])/i',"$1/$2",$url1);      //先頭に /を付与する

$url1 = str_replace(' SRC="/',' SRC="http://example.com/',$url1);  // 先頭が /の場合はルールに従う

print $url1;

?>

【変換後】

<IMG SRC="http://example.com/test"><BR>

<IMG SRC="http://example.com/sample.htm"><BR>

<IMG SRC="http://example.com/test/sample.htm"><BR>

<IMG SRC="http://example.com/sample.htm"><BR>


ちなみに、HTML内のリンク全てに特定のドメインをベースにしたいのであれば <BASE HREF="~">を使う方が楽だと思います

http://www.tagindex.com/html_tag/link/base.html

id:fm315

みなさん、有難うございます。

大変参考になります。

2006/03/29 17:19:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません