<< 自然文検索に対応したOkSearchAPI | main | HTMLのパース >>

2007.04.08 Sunday

文字列中の相対パスを絶対パスに変換

文字列中の相対パスを絶対パスに変換する方法をメモ。

例えば、
文字列が
$cdata = '<img src="images/fuga.jpg" class="pict" alt="" width="240" height="400" />
<p>本文</p>';

と与えられた場合、そのページ以外からは画像の表示が出来ないので、絶対パスに変換してあげる必要があるわけです。
RSSというのは、自分以外のページからコールされるのが基本なので、RSSに相対パス状態で情報を格納するのはどうなんだ?
というのはありますが、現実としてこういうフィードがあるのは事実なので、使う側で何とかしてあげないと、どうにもなりません。
ときおり、特定のRSSリーダーだけで特定のフィードの画像が表示されない、というのは、こういう理由からです。
また、外部サイトからの画像読み込みを禁止しているサイトもあるので、そういうところは、どうにもなりませんが・・・
--

■ディレクトリ名の取得
まずは、絶対パスの生成に必要なのがディレクトリ名。
基本的に、リンク情報が相対パスになっていることはないので、ここから、ディレクトリネームを切り出せばOKです。
$dirname = dirname($link);

こんな感じです。

■文字列置換
PHPでの文字列置換は、preg_replaceという関数を使うと簡単です。
ソースは、以下のとおり。
$dirname = dirname($link);
$patterns[0] = '/src="images/';
$replacements[0] = 'src="'.$dirname.'/images';
ksort($patterns);
ksort($replacements);
$cdata = preg_replace($patterns,$replacements,$cdata);

src(しかもimagesディレクトリ)に対応できればよい、という程度のものなので、参考程度に。
preg_replaceの第一引数に検索パターン、第二引数に置換文字列、第三引数に検索対象文字列を指定するだけです。
これで、入力されたcdataの相対パスを絶対パスに変換できます。
変換対象がない場合は、元データはそのままなので、影響はありません。
一応、複数変換しやすいように配列で変換対象を決めています。
ksortしている理由は、preg_replaceをご覧ください。

--

テクノラティお気に入りに追加する

Comments

コメント入力は停止しています

海外からと思われるコメントスパムが横行しているため、全記事のコメント入力を停止しています。メッセージのある方は、ホームページの一番下に連絡欄がありますので、そちらからお願いします。

Trackback URL

トラックバックする場合は、
トラックバック元の記事にこのエントリへのリンクを記載してください
このエントリのタイトル「文字列中の相対パスを絶対パスに変換」
このエントリのリンク「http://kommy.s254.xrea.com/blog/log/eid31.html」