2012-03-06 58 views
1

對於我的客戶,我編寫了一個基於Web的所見即所得HTML編輯器。它允許他們格式化基本的HTML文本並插入圖像。當他們插入圖像我插入他們像##image1##模式。產生的HTML可以是這樣的:用PHP替換HTML文本中的字符串模式

<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##等。我的替換代碼在這裏:

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

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

這將工作的時代,但在輸入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>之前添加一行制動那麼它會分析它確定。任何想法這裏發生了什麼,爲什麼我有問題?

我也對此建議更好的方式。我可以插入別的東西##image1##在我的所見即所得編輯器中插入圖像時...感謝

+3

爲什麼不直接插入圖片HTML? – GolezTrol 2012-03-06 19:13:33

+0

與[你的其他問題]不是這個問題(http://stackoverflow.com/questions/9432947/php-replacing-all-occurances-of-certain-string-pattern-in-html-formatted-text )? – 2012-03-06 19:16:16

+0

由於孔應用程序的性質...很難解釋,但這是爲什麼不這樣做的原因! – 2012-03-06 19:16:24

回答

1

這是因爲+修飾符是貪婪的。所以它會匹配一切,直到##的最後一個實例。嘗試在+之後添加一個?,將其更改爲不合格。

|##(.+?)##| 

一個換行符解決了這個問題的原因是因爲在默認情況下.不匹配換行符。然而,如果你做了,而不是:|##(.+)##|s換行符不會解決問題。

編輯我剛剛注意到churk's answer到你以前的問題也能正常工作。

+0

的?在這種情況下確實解決了問題!非常感謝你。希望這將是最終的解決方案,雖然我看到何時這種解析也可能失敗......有人把##放在HTML文本里面... – 2012-03-06 19:21:56

+1

@Primoz是的,這將是一個問題,但你可以隨時做類似於:'/ {{\ {\ {#([\ s \ S] +?)\} \} /'爲'{{#image1}}''。某人在html中使用'{{'''是不太可能的。 – 2012-03-06 19:24:24

0

你應該直接創建<img/> - 但無論如何,如果你不使用#爲你的形象的名稱,使用^#代替.

如果你還不能確定##不會在其他使用HTML,<div>也試過

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

在WYSIWYG編輯器中直接插入圖像帶來各種問題,從格式化問題等等...如果您使用任何所見即所得編輯器,您應該知道這一點。如果有幾個參數可以綁定到插入的圖像,那麼這個問題會變得更加明顯。這就是爲什麼我決定走這條路。完美的作品,只需要解決我遇到的這個問題! – 2012-03-06 21:56:19