Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Заменить все "<", не входящие в тэги
 
 автор: GreenPiece   (17.01.2012 в 23:44)   письмо автору
 
 

Добрый день.

Поиск выдал похожие темы, но все же немного на такие.
Нужно заменить все "<", которые не входят в определенные тэги, в частности, в "<p>", "</p>", на "&gt;"

Это я хочу сделать для электронной книги. она воспринимает "<", ">" как спец. символы, поэтому, если эти символы не задействованы в тэгах, их нужно заменить на коды, потому что иначе текст в строке после этих символов не виден.

Формат текста представлен примерно так:
<p>Здесь текст</p>
<p><strong>Здесь код C++ с текстом "#include <windows.h>", циклом for (int i = 0; i < 10; i++) и символами "->"</strong></p>

Соответственно, мы увидим:
Здесь текст
Здесь код C++ с текстом "#include

Если заменить все "<", то вместо отформатированного текста мы увидим "<p>Здесь текст</p><p><strong>Здесь код C++ с текстом"... Поэтому в тэгах символы "<" и ">" должны остаться нетронутыми, а вне тэгов - быть преобразованными в коды.

  Ответить  
 
 автор: cheops   (18.01.2012 в 00:05)   письмо автору
 
   для: GreenPiece   (17.01.2012 в 23:44)
 

Лучше вот как поступить, сначала заменить все <p> и </p> на [p] и [/p], со спокойной душой заменить < на &lt;, а > на &gt;, а потом заменить [p] и [/p] снова на <p> и </p>.

  Ответить  
 
 автор: Sfinks   (18.01.2012 в 00:08)   письмо автору
 
   для: GreenPiece   (17.01.2012 в 23:44)
 

Не помню как сделать отрицание строк, поэтому предложу в два этапа:
<?php

$s 
= <<<HTML
  <p>Здесь текст</p>
  <p class="abzac"><strong>Здесь код C++ с текстом "#include <windows.h>", циклом for (int i = 0; i < 10; i++) и символами "->"</strong></p>
HTML;

  
$s strtr($s,array("<" => "&lt;"">" => "&gt;"));

  
$pat "#&lt;(/?)(p|strong)(.*?)&gt;#is";
  
$s preg_replace($pat,"<$1$2$3>",$s);
  echo 
$s;

?>
И в $pat в (p|strong) нужно через | перечислить все теги, которые у вас встречаются.
Может кто предложит лучше, но для начала и так работает.

  Ответить  
 
 автор: GreenPiece   (18.01.2012 в 02:13)   письмо автору
 
   для: Sfinks   (18.01.2012 в 00:08)
 

Спасибо большое!

Немного доработал под свою задачу - и все получилось.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования