Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Функция изменения текста между тэгами в php

Возникла необходимость написания функции, которая бы обрабатывала текст особым образом между всеми тэгами в тексте вида [xx] [/xx] в php текста. Ниже об этом небольшая поэма с показом примера для Wordpress...

02.03.2014 Leave a Comment 4 079 просмотров

Возникла необходимость написания функции, которая бы обрабатывала текст особым образом между всеми тэгами в тексте вида [xx] [/xx] в php текста. Ниже об этом небольшая поэма с показом примера для WordPress…

В примере рассмотрен пример, где текст в тэге становится жирным.
Итак, сгенерировнаная функция выглядит так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
function WorkWithTags($content){
$Tag ="xx";// считаем, что есть тэг [xx] и [/xx]. Вот тут и меняйте текст
 
//Поиск всех тегов нужного вида [xx] [/xx] и сохранение текста между ними. Вместо [xx] и [/xx] вставьте свои тэги.
if (preg_match_all('~['.$Tag.'](.*?)[/'.$Tag.']~is', $content, $arr))
{
   //Пробегаем по всем найденным тэгам
   foreach ($arr[1] as $value)
   {
      //Тут производим анализ текста из переменной $value и его изменение в переменную $newvalue
      //НАЧАЛО ИЗМЕНЕНИЙ
      $newvalue = "<b>".$value."</b>"; // Пример изменений
      //КОНЕЦ ИЗМЕНЕНИЙ
 
      $content=str_replace($value, $newvalue, $content);//заменим старые варианты подстрок между тэгами на новые
   }
 
   //Удалим тэги [xx] и [/xx]
   $tr=array('['.$Tag.']'=>'','[/'.$Tag.']'=>'',);
   $content=strtr($content,$tr);
}
return $content;
}
?>

В ней в качестве параметра $Tag =”xx” и задается название тэга.

Если у вас есть такой код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<html>
<head> <meta charset="UTF-8"> </head>
<body>
<?
function WorkWithTags($content){
$Tag ="xx";// считаем, что есть тэг [xx] и [/xx]. Вот тут и меняйте текст
 
//Поиск всех тегов нужного вида [xx] [/xx] и сохранение текста между ними. Вместо [xx] и [/xx] вставьте свои тэги.
if (preg_match_all('~['.$Tag.'](.*?)[/'.$Tag.']~is', $content, $arr))
{
   //Пробегаем по всем найденным тэгам
   foreach ($arr[1] as $value)
   {
      //Тут производим анализ текста из переменной $value и его изменение в переменную $newvalue
      //НАЧАЛО ИЗМЕНЕНИЙ
      $newvalue = "<b>".$value."</b>"; // Пример изменений
      //КОНЕЦ ИЗМЕНЕНИЙ
 
      $content=str_replace($value, $newvalue, $content);//заменим старые варианты подстрок между тэгами на новые
   }
 
   //Удалим тэги [xx] и [/xx]
   $tr=array('['.$Tag.']'=>'','[/'.$Tag.']'=>'',);
   $content=strtr($content,$tr);
}
return $content;
}
?>
<?
$S="[xx]наташа[/xx] ... [xx]даша[/xx] ... [xx]настя[/xx]";
echo "$S<br>";
 
$S=WorkWithTags($S);
 
echo "$S<br>";
?>
</body>
</html>

То вы получите вот это:

2014-02-26_134045

Если вы хотите добавить в WordPress функцию обработки шорттега, то найдите файл functions.php в вашей теме и добавьте такое, в конце файла:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
add_filter('the_content', 'WorkWithTags');
function WorkWithTags($content){
$Tag ="xx";// считаем, что есть тэг [xx] и [/xx]. Вот тут и меняйте текст
 
//Поиск всех тегов нужного вида [xx] [/xx] и сохранение текста между ними. Вместо [xx] и [/xx] вставьте свои тэги.
if (preg_match_all('~['.$Tag.'](.*?)[/'.$Tag.']~is', $content, $arr))
{
   //Пробегаем по всем найденным тэгам
   foreach ($arr[1] as $value)
   {
      //Тут производим анализ текста из переменной $value и его изменение в переменную $newvalue
      //НАЧАЛО ИЗМЕНЕНИЙ
      $newvalue = "<b>".$value."</b>"; // Пример изменений
      //КОНЕЦ ИЗМЕНЕНИЙ
 
      $content=str_replace($value, $newvalue, $content);//заменим старые варианты подстрок между тэгами на новые
   }
 
   //Удалим тэги [xx] и [/xx]
   $tr=array('['.$Tag.']'=>'','[/'.$Tag.']'=>'',);
   $content=strtr($content,$tr);
}
return $content;
}

В общем всё!

Кстати, если вам нужно просто обрамить текст некоторыми тегами вместо [xx] и [/xx], то можно сделать проще. Ниже показан пример подобной функции в WordPress. А описанный выше в статье способ предназначен, когда вам нужно иметь возможность как-то обрабатывать текст между тегами, а не только обрамить тегами.

1
2
3
4
5
6
7
8
9
10
add_filter('the_content', 'make_important');
function make_important($content){
if( strpos($content, '[important]')===false ) return $content;
$tr=array(
"[important]"=>"<span class=\"important\">",
"[/important]"=>"</span>",
);
$content=strtr($content,$tr);
    return $content;
}


Статьи по теме:

  1. Установка Apache + Php + MySQL + phpMyAdmin в Windows 8.1
  2. Сложение двух чисел на HTML + PHP
  3. jQuery не работает в WordPress
  4. Инструменты, использованные в блоге. Часть 2

Web программирование PHP, Wordpress

© 2014 Harrix