●文字列中の相対パスを絶対パスに変換
文字列中の相対パスを絶対パスに変換する方法をメモ。
例えば、
文字列が
と与えられた場合、そのページ以外からは画像の表示が出来ないので、絶対パスに変換してあげる必要があるわけです。
RSSというのは、自分以外のページからコールされるのが基本なので、RSSに相対パス状態で情報を格納するのはどうなんだ?
というのはありますが、現実としてこういうフィードがあるのは事実なので、使う側で何とかしてあげないと、どうにもなりません。
ときおり、特定のRSSリーダーだけで特定のフィードの画像が表示されない、というのは、こういう理由からです。
また、外部サイトからの画像読み込みを禁止しているサイトもあるので、そういうところは、どうにもなりませんが・・・
例えば、
文字列が
$cdata = '<img src="images/fuga.jpg" class="pict" alt="" width="240" height="400" />
<p>本文</p>';
と与えられた場合、そのページ以外からは画像の表示が出来ないので、絶対パスに変換してあげる必要があるわけです。
RSSというのは、自分以外のページからコールされるのが基本なので、RSSに相対パス状態で情報を格納するのはどうなんだ?
というのはありますが、現実としてこういうフィードがあるのは事実なので、使う側で何とかしてあげないと、どうにもなりません。
ときおり、特定のRSSリーダーだけで特定のフィードの画像が表示されない、というのは、こういう理由からです。
また、外部サイトからの画像読み込みを禁止しているサイトもあるので、そういうところは、どうにもなりませんが・・・
--
■ディレクトリ名の取得
まずは、絶対パスの生成に必要なのがディレクトリ名。
基本的に、リンク情報が相対パスになっていることはないので、ここから、ディレクトリネームを切り出せばOKです。
こんな感じです。
■文字列置換
PHPでの文字列置換は、preg_replaceという関数を使うと簡単です。
ソースは、以下のとおり。
src(しかもimagesディレクトリ)に対応できればよい、という程度のものなので、参考程度に。
preg_replaceの第一引数に検索パターン、第二引数に置換文字列、第三引数に検索対象文字列を指定するだけです。
これで、入力されたcdataの相対パスを絶対パスに変換できます。
変換対象がない場合は、元データはそのままなので、影響はありません。
一応、複数変換しやすいように配列で変換対象を決めています。
ksortしている理由は、preg_replaceをご覧ください。
--
■ディレクトリ名の取得
まずは、絶対パスの生成に必要なのがディレクトリ名。
基本的に、リンク情報が相対パスになっていることはないので、ここから、ディレクトリネームを切り出せば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
コメント入力は停止しています
海外からと思われるコメントスパムが横行しているため、全記事のコメント入力を停止しています。メッセージのある方は、ホームページの一番下に連絡欄がありますので、そちらからお願いします。