2012-03-06 27 views
1

私の顧客にとっては、カスタムWebベースのWYSIWYG HTMLエディターを作成しました。基本的なHTMLテキストの書式設定や画像の挿入が可能です。彼らが画像を挿入するとき、私は##image1##のようなパターンでそれらを挿入します。HTMLテキストの文字列パターンをPHPで置き換えます

<p>some text and some more text</p> 
<p>some text and some <b>bold text</b></p> 
<div>##image1##</div> 
<p>more text can follow here</p> 
<div>##image2##</div> 

遠出このHTMLは、私はトラフそれを検索し、イメージの出現を交換して、実際に画像を表示するHTMLマークアップとその上の##image1####image2##を交換しています:作成されたHTMLには、このようなものになることができます。マイ置き換えるコードここにある:

// first find all occurrences of image string 
preg_match_all('|##(.+)##|', $inputHTML, $matches); 

for every match in $inputHTML 
    $output = preg_replace('|##(.+)##|', $imageHTML, $inputHTML, 1); 

これは時代のMOTを動作しますが、入力HTMLのいくつかのバリエーションで奇妙な結果を解析します。奇妙な結果を生成するHTMLの一つは次のとおりです。

<div>##image1##</div><p class="align-justify"><strong>Peter Dekleva</strong>, <strong>Damir Lisica</strong>, <strong>Anej Kočevar</strong> in <strong>Gregor Jakac</strong> so glasbeniki, ki v svoji glasbi združujejo silovite instrumentalne vložke, markantne melodije in močna besedila.</p><div>##image2##</div><p class="align-justify">Video dvojček skladbe Brez strahu torej prikazuje oblico sproščenih trenutkov iz zaodrja, veličasnih posnetkov s koncertnega dogajanja, priprav na nastope, nepredvidljive zaključke noči.</p> 

私はそのHTMLを編集し、<div>##image2##</div>前にラインブレーキを追加した場合、それはOKそれを解析します。何が起こっているのか、なぜ私に問題があるのか​​?

私はまたこれを行うためのより良い方法のための提案にもオープンしています。私は代わりに何かを挿入することができます##image1##私のWYSIWYGエディタに画像を挿入するとき...ありがとう

+3

なぜ画像HTMLを挿入してみませんか? – GolezTrol

+0

これは[あなたの他の質問]と同じ問題ではありません(http://stackoverflow.com/questions/9432947/php-replacing-all-occurances-of-certain-string-pattern-in-html-formatted-text)。 )? –

+0

穴の性質のため、アプリケーション...説明するのは難しいですが、そういうわけではありません! –

答えて

1

これは+修飾子が欲張りであるためです。したがって、最後のインスタンスが##になるまですべてが一致します。 +の後に?を追加して、それをungreedyに変更してください。デフォルトで.は改行と一致しないため、

|##(.+?)##| 

改行が問題を修正した理由です。しかし、あなたが代わりに行った場合:|##(.+)##|s改行で問題は解決されませんでした。

私はちょうどあなたの前の質問へのchurk's answerも正しく機能していることに気づいた。

+0

?この場合、問題を解決しました!どうもありがとうございました。私はこの種の解析も失敗することがあると思うが、これは最終的な解決策になると思うが...誰かがHTMLテキストの中に##どこかを入れている... –

+1

@Primozうん、それは問題だが、いつでもできる'{{#{image1}} 'の場合は'/\ {\ {#([\ s \ S] +?)\} \}/'のようになります。誰かがhtmlの '{{#'を使うことはほとんどありません。 –

0

あなたは直接<img/>を作成する必要があります - とにかく、あなたのイメージ名に#を使用していない場合、あなたは##他では使用されないことをわからない場合は代わりにも.

^#を使用しますHTML、<div>のためのテスト

<div>##(^#+)##</div> 
+0

WYSIWYGエディタに直接イメージを挿入すると、書式設定の問題などあらゆる種類の問題が発生します.WYSIWYGエディタを使用した場合、それを知っておく必要があります。挿入されたイメージにバインドできるパラメータがいくつかある場合、この問題はさらに顕著になります。だからこそ私はこのように行くことに決めました。完璧に動作し、私はこの問題を解決するために必要なだけです! –

関連する問題