2013-04-11 5 views
1

У меня есть редактор WYSIWYG, и мой клиент хочет использовать аналогичный шаблон, например, Wordpress shortcodes.замените строку на строку из исходной строки

Эффективно клиент хочет сделать что-то вроде:

[.class_name] 
     /// Some content here 
[/close_container] 

Я могу легко заменить [/ close_container] с помощью str_replace(), но, как class_name будет меняться с каждым шорткодом используется (скажем, это было [ .green_block] Я первый как-то захватить green_block, а затем заменить все [.green_block] с <div class='green_block'>. Там нет предопределенного списка классов, так что я немного невежествен о том, как подойти к этому.

любых идеи?

+0

даже 'StrPos 'может помочь вам найти его, и' substr_replace' заменить – zerkms

+0

Если список предопределенных классов отсутствует, почему бы вам не ввести только '

...
' и сделать? –

+0

@ M8R-1jmw5r - I tri ed my best to push for this, но клиент неохотно пишет любой html-код. Поверьте мне, я попробовал:/ – mauzilla

ответ

1

Это именно то, что регулярные выражения был бы идеальным для:

$string = preg_replace('/\[\.(\w+)\]/i', '<div class="$1">', $string); 
$string = str_replace('[/close_container]', '</div>', $string); 

Очевидно, что выше не будет иметь какой-либо проверки ошибок, так что вполне может построить уродливы HTML. Однако с некоторой дополнительной работой вы можете обойти эту проблему и создать что-то довольно стабильное.

1

Использование

$formated_string= preg_replace("/\[\.(\w\-\s)\]/", "$1", $entire_string); 

Шалом ...

1

С ограниченным набором разрешенных ввода (и сделать ваш клиент требует, чтобы записать их в HTML-сущности, если не следует рассматривать как специальный код символа &#91; [/&#93; ]:

strtr($string, array(
    '[/close_container]' => '</div>', 
    '[.' => '<div class="', 
    ']' => '">' 
)); 

Works like a charm.

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