2010-10-04 4 views
1

У меня есть пользовательские теги html в моих приложениях, это выглядит так: <wiki href="articletitle">Text</wiki> и хочу, чтобы он был таким: <a href="http://myapps/page/articletitle">Text</a>. Как я могу это сделать в PHP?замена пользовательского тега html в php

+0

Чей код создает эти пользовательские теги? – egrunin

ответ

1

Ruel is right, DOM parsing - правильный способ приблизиться к нему. В качестве упражнения в регулярном выражении, однако, что-то, как это должно работать:

<?php 
$string = '<wiki href="articletitle">Text</wiki>'; 
$pattern = '/<wiki href="(.+?)">(.+?)<\/wiki>/i'; 
$replacement = '<a href="http://myapps/page/$1">$2</a>'; 
echo preg_replace($pattern, $replacement, $string); 
?> 
+1

Вы должны хотя бы сделать квантификаторы ленивыми, или это взорвется. –

+0

Спасибо - сделали. – tagawa

0

Я trying to do something very similar. Я рекомендую избегать RegEx, как чума. Это никогда не бывает так просто, как кажется, и эти угловые случаи вызовут кошмары.

Сейчас я склоняюсь к библиотеке Custom Tagsmentioned in this post. Одна из лучших особенностей является поддержка для заглубленных или вложенных тегов, таких как блок кода ниже:

<ct:upper type="all"> 
    This text is transformed by the custom tag.<br /> 
    Using the default example all the characters should be made into uppercase characters.<br /> 
    Try changing the type attribute to 'ucwords' or 'ucfirst'.<br /> 
    <br /> 
    <ct:lower> 
     <strong>ct:lower</strong><br /> 
     THIS IS LOWERCASE TEXT TRANSFORMED BY THE ct:lower CUSTOM TAG even though it's inside the ct:upper tag.<br /> 
     <BR /> 
    </ct:lower> 
</ct:upper> 

Я настоятельно рекомендую скачать почтовый файл и просматривая примеры, которые он содержит.

Смежные вопросы