2012-01-22 4 views
0

私は人々が画像を実際のURLを取得して抽出する方法を尋ねると、Webページのコンテンツ/テキストなどから多くの答えを見てきました。構文は:phpはテキストファイルから画像を取得するためのパターンを一致させる

<img class="photo" src="http://domain.com/image.jpg" alt="alt goes here" /> 

ので、一般的な方法$pattern = '/src=["|\']([^"|\']+)/is';が原因それら"に私の場合には動作しません... は、私は非常に非常に間違った何かをしなければなりません時間しようとしている... すべてのヘルプはありますとても有難い!

+0

は、なぜあなたは最初 'あなたの正規表現を使用し、その後、すべてのことをstr_replace'ませんか? –

+0

'str_replace'は安全でないためですか? ** PHPがHTMLのデコーダーとパーサーをPHPで作成するのはなぜでしょうか?** – Christian

+0

@ChristianSciberras - 私が誤解しているようです:最初に 'str_replace'を実行するべきです彼の文字列](http://codepad.org/QekMM6IG)、彼の正規表現を使用! –

答えて

1

正規表現を使用しないでください!

Simple HTML DOMのようなXML/DOMライブラリを使用してください。

ところで、あなたが探している正規表現は、

$pattern = '/src=(["\'])(.+)(?=\1)/i'; 

テストケース(オプション):ここで

はそれをテストするための簡単なプログラムです。明らかにエンティティ形式からデコードするには、最初にhtmlspecialchars_decode()を使用する必要があります。

$str = array(
    "<script type=\"text/javascript\" src=\"script.js\"></script>", 
    "<script type=\"text/javascript\" src='script.js'></script>", 
    '<script type="text/javascript" src="script.js"></script>', 
    '<script type="text/javascript" src=\'script.js\'></script>', 
); 
$pattern = '/src=(["\'])(.+)(?=\1)/i'; 

foreach($str as $s){ 
    preg_match($pattern, $s, $m); 
    echo $m[2], PHP_EOL; 
} 

出力

script.js 
script.js 
script.js 
script.js 
+0

@mario私は、私の間違いを参照してください。正規表現のファンボイス主義のもう一つのケースだと思った。 – Christian

+0

Okie。 OPに従って質問を更新してください。 @mario。 –

+0

ありがとう皆さん、私はhtmlspecialchars_decodeに関するあなたのアドバイスに続き、ついに私は有効な画像URLを持っています! 'if(preg_match($ pattern2、htmlspecialchars_decode($ ck ['post'])、$ found_img))' – Andrew

0

あなたはここに正規表現をテストすることができます。

http://gskinner.com/RegExr/

働いていませんか?

+0

まず第一に、二重引用符は他の特殊文字と同じように '"'に変換されます。次に 'preg_match' *はここでの解決策ではありません。 – Christian

+0

@ChristianSciberras、まあ、元の投稿ではエンコードが見えませんでした。いい答え! – mowwwalker

2

まず、「通常の方法」は、正規表現ではなく、HTML/XMLパーサーを使用することです。

第二に、何を持っていることは、二つの理由のためにひどく臭いHTMLテキストとしてエンコードHTMLコードです:

  • これ以上のHTMLいない(それは実際のHTMLコードであるときに、なぜHTMLテキストとしてエンコード) ?
  • HTMLをDBに入れる前にエンコードするのではなく、ユーザーに書き込むべきです。私これに、言っ

    $stuff = '&lt;img class=&quot;photo&quot; src=&quot;http://domain.com/image.jpg&quot; alt=&quot;alt goes here&quot; /&gt;'; 
    $code = htmlspecialchars_decode($stuff, ENT_QUOTES); 
    $xml = simplexml_load_string($code); 
    

    ひどく修正するハックのように聞こえる:あなたが何をする必要があるかはさておきこれらの2つの問題、と

は、その原料をhtmlspecialchars_decode()とHTMLパーサを通してそれを渡すことです書かれたコード。しかし、それが最初にそこにあった正当な理由があるかもしれません。

+0

は ' '< IMGクラス= "写真" SRC = " http://domain.com/image.jpg " ALT = " altが"/>ここに';'千の異なるURLが検出された道を示すためのダミーサンプルです私のデータベースに。私の問題は、毎回実際の画像の場所を分離することです。 – Andrew

+0

@Andrew私の主張は、あなたがデータベースに持っているものが正しく行われていないということでした。まず、HTMLをHTMLテキストにエンコードしないでください。第2に、データがブロブではなく列と表に分割されている場合、データベースが最も効果的です。それにもかかわらず、私のコードを使ってあなたが望むことをすることができます。 – Christian

+0

@Christian Sciberrasさん、ありがとうございました、ありがとうございます。私のコードではありません。教えてくれる人ではありません。購入したものを修正しようとしている初心者は、意図した通りに動作しません... DBコンテンツのこのタイプのInvision IPBこれはすべて、許可されたユーザーがhtmlを投稿するときに起こります(htmlを投稿に直接投稿することが許可されている場合)。私はこのような状況を私の手にしています。そのようなもので、それを変えることはできません。それを処理し、画像のURLを認識する正規表現を見つける必要があります:) – Andrew

関連する問題