teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

前回のでは、文字列に複数のimgタグがあった際に同じファイル名に置き換わってしまったので、修正しました

2021/12/31 09:04

投稿

t-hoso
t-hoso

スコア21

answer CHANGED
@@ -1,9 +1,10 @@
1
- preg_match("/<img [^>]*src\s*=\s*[\"']?([^\"'> ]+)/i", $path,$match);
1
+ $pregCount = preg_match_all("/<img [^>]*src\s*=\s*[\"']?([^\"'> ]+)/i", $path,$solo);
2
+ for($i=0;$i<$pregCount;$i++) {
3
+ $newPath= "";
2
- $url = explode("/",$match[1]);
4
+ $pathName = explode("/",$solo[1][$i]);//imgの属性値を取り出してスラッシュで分割
5
+ $newPath = end($pathName);//ファイル名だけを取得
6
+ $newPath = "images/".$newPath;//相対パスの生成
7
+ $path = str_replace($solo[1][$i],$newPath,$path);
8
+ }
3
9
 
4
- $filename = end($url);
5
- $filename = "images/".$filename;
6
-
7
- $path = preg_replace("/(<img [^>]*src\s*=)\s*[\"']?([^\"'> ]+)/i", '$1'.$filename, $path);
8
-
9
10
  取り出したURLからファイル名だけを取り出して、images/つけて、おきかえました。