2012-03-06 66 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