{strip}: как избежать нежелательного удаления пробелов?

{strip} <div class="x" > {/strip} 

становится

 <divclass="x"> 

И это не то, что кто-то захочет.

Итак, вопрос: есть ли способ сделать это? Воображаемые подходы:

  • заменить новые строки пробелами, используя параметры или другие функции smarty
  • добавлять защищенные пространства, которые не разделяются

В этой теме на форуме нет решения (кроме – добавить свой собственный тег). Кроме того, пожалуйста, не предлагайте решения в raw PHP или других языках / фреймворках.

Solutions Collecting From Web of "{strip}: как избежать нежелательного удаления пробелов?"

Вы можете либо пойти с подходом @ dev, и захватить ваши данные и запустить его через модификатор полосы :

 {capture name="spaces"} <div class="x" > ... </div> {/capture} {$smarty.capture.spaces|strip:" "} 

или запустить захваченное содержимое с помощью модификатора regex_replace (по существу, делайте то же самое, что и split, но с большим объемом служебных данных):

 {$smarty.capture.spaces|regex_replace:"#\s+#":" "} 

или добавить новый настраиваемый блок-плагин под названием trimwhitespace, в котором используется триммерное пространство выходного фильтра :

 <?php function smarty_block_trimwhitespace($params, $content, Smarty_Internal_Template $template, &$repeat) { require_once SMARTY_PLUGINS_DIR . 'outputfilter.trimwhitespace.php'; return smarty_outputfilter_trimwhitespace($content, $template->smarty); } 

вызовите этот файл block.trimwhitespace.php и поместите его в plugins_dir. используйте его в своем шаблоне:

 {trimwhitespace} <div class="x" > ... </div> {/trimwhitespace} 

Хотя оба подходов к модификаторам будут работать отлично для простых вещей HTML, они будут разбиты на контент, включая теги <script> или <pre> . Если вам это нужно, вы хотите пойти с завернутым выходным фильтром.

Если вы хотите, чтобы все ваши выходные данные запускались через этот фильтр, забудьте изменить свои шаблоны и добавить $smarty->loadFilter('output', 'trimwhitespace'); к вашей установке.

Чтобы защитить отдельные пространства:

 {strip} <div class="first{" "} {"second "} third"> {/strip} 

становится

 <div class="first second third"> 

отлично работает для меня с smarty v3.

Назначьте свой код переменной и попробуйте {$articleTitle|strip:'&nbsp;'}