1

次のように画像をコンテンツから分離します。

list($img, $string) = explode('>', $string, 2);
$isSlashes = (stripos($img, '\\')!==false);
if ($isSlashes) {
  $img = stripslashes($img);
}
preg_match('|src=["\']([^"\']+)["\']|i', $img, $match);
if (empty($match[1])) {
  imgres_log('Image src not found in '.$img, 'error');
  imgres_joinContent($content, $img, $string, $isSlashes);
  continue;
}
$src = $match[1];

...画像にクエリ文字列が提供されている場合を除いて、通常は機能します。たとえば、img0880.jpg?itok=pUzE5f9dすべてが台無しになります。?マークの後の部分を削除するにはどうすればよいですか?

4

2 に答える 2

2

さて、あなたが言うことを行うには、追加するだけです ? あなたの正規表現に。

preg_match('|src=["\']([^"\'?]+)["\']|i', $img, $match);

しかし、または実際には2つのバット。1) 画像の ? の後にクエリ文字列がある場合、それは画像 URL の一部です。like image.jpg?foo=bar は、image.jpg?foo=baz とは異なる画像を参照する場合があります。2) ここでは一重引用符と二重引用符を許可しています。しかし、src="joe's_image.jpg" または src=image.jpg がある場合はどうなるでしょうか。どちらの場合も HTML は有効であり、スクリプトで失敗します。

解決策: 正規表現の代わりに DOM パーサーを使用することをお勧めします。

于 2013-03-08T12:11:21.780 に答える
1

これを試して

preg_match("~src=(\"|'|)(.*?)[\"|'| ]~si", $img, $match);

すべての条件に対応

お気に入り

1)

src="image.jpg?dasd=a5fsd"

出力

Array
(
  [0] => src="image.jpg?dasd=a5fsd"
  [1] => "
  [2] => image.jpg?dasd=a5fsd
)

2)

src='image.jpg?dasd=a5fsd'

出力

Array
(
   [0] => src='image.jpg?dasd=a5fsd'
   [1] => '
   [2] => image.jpg?dasd=a5fsd
)

3)

src=image.jpg?dasd=a5fsd

出力

Array
(
  [0] => src=image.jpg?dasd=a5fsd 
  [1] => 
  [2] => image.jpg?dasd=a5fsd
)
于 2013-03-08T12:36:40.460 に答える