2009-09-01 13 views
1

単純なPHPスクリプトを作成して、HTMLテキスト内のすべての画像からすべてのsrc属性を見つけ、いくつかの条件変更を行った後、見つかったすべてのsrcsをテキストに置き換えようとしています。このようなHTMLテキスト内のすべての画像srcタグを置き換えます。

何か:

foreach ($images as $img) { 
    ..my changes here.. 
} 

となりました...どのように私は、変更さSRCSを復元することができます。

@preg_match_all('/<img\s src="([a-zA-Z0-9\.;:\/\?&=_|\r|\n]{1,})"/isxmU', $body, $images); 

今私は今私が作る、$画像変数にすべてSRCSをしました$ body変数に再び??事前に

多くのおかげで、

答えて

4

、代わりにあなたがひどく形成HTMLで作業する必要がある場合は非検証パーサはさらに良いかもしれhttp://simplehtmldom.sourceforge.net/

+0

これはHTMLフラグメントや不正な形式のHTMLで動作しますか? –

+0

それは無効なhtmlをサポートしていると言います。私はそれを使用していないので、どのようにhtmlパーサのかなり基本的な要件になると思いますか。あなたが探しているものは、xssフィルタリングツールがhttp://htmlpurifier.org/をチェックしている場合です –

5

あなたはそれぞれの試合を後処理することができますどの、preg_replace_callback()になっているはずですが、しかし、あなたは、コールバック関数を使用して、好きです。 (preg_match_all()の代わりにそれを使用します)。

+0

多くの感謝のカオス、私はpreg_replace_callback()のためのドキュメントを読んでいる、私はそれを働かせることができません。私はこのコードを使ってテストしています: 関数ReplaceImage($ match){ \t \t \t $ match [1] = "REPLACED"; \t \t \t return $ match [1]; \t \t} \t \t \t \t $本体= preg_replace_callback( '/ fidoboy

+1

'preg_replace_callback()'は壊れていません。あなたの正規表現が私のように見えます。なぜあなたは 'img'の後に空白の要素*の後ろにスペースを必要としていますか? – chaos

-2

preg_replaceを使用しないでください。 e修飾子を使用すると、置換テキストはeval 'となります。したがって、置換対象のテキストに対して、foreachループで行ったのと同じことができます。

EDIT:preg_replace_callbackは、preg_replacee修飾子を使用するよりもきれいである私のANSERを書きながら、そのことを考えていなかったので、カオス答えは優れています。

+0

ときどき私は嫌いです...この質問に対する最も賛美された答えは、私の答えとまったく同じことを言っていますが、私は下降しました...私の答えを書いたとき、もう一つはまだありませんでした。私は書いていましたが(2つのポストデートの間に2つのミニッツ差があることがわかります)。 – p4bl0

-1

あなたが探している最も簡単な答えは、str_replaceを行うことです。

foreach ($images as $img) { 
    ..my changes here.. 
    $body = str_replace($original_string, $modified_string, $output_body); 
} 
+0

簡単ですが、最適なオプションではありません。 2つのoriginal_stringsが同じだが、別の何か(ここではイメージno xyzに使用されていた)で置き換えられるはずです。または、ある置換文字列がページ上のどこかに置き換えられる文字列と同じ場合はどうなりますか? – Residuum

+0

あなたは正しいResiduumです、それは問題です...私は同じ位置に同じ文字列を正確に置き換える必要があります。私はpreg_replace_callbackが最善の選択だと思うが、私はそれを働かせることができない... 誰も簡単なサンプルを入れて、インクリメントされた数字ですべてのimg srcsを置き換えることはできますか? – fidoboy

0

を使用し、維持するためにはるかに簡単にHTMLのDOMパーサを使用してください。 HTMLファイルを変更し、横断するための良好なインターフェースについて

http://pear.php.net/package/XML_HTMLSax3