|
|
|
| Добрый день.
Поиск выдал похожие темы, но все же немного на такие.
Нужно заменить все "<", которые не входят в определенные тэги, в частности, в "<p>", "</p>", на ">"
Это я хочу сделать для электронной книги. она воспринимает "<", ">" как спец. символы, поэтому, если эти символы не задействованы в тэгах, их нужно заменить на коды, потому что иначе текст в строке после этих символов не виден.
Формат текста представлен примерно так:
<p>Здесь текст</p>
<p><strong>Здесь код C++ с текстом "#include <windows.h>", циклом for (int i = 0; i < 10; i++) и символами "->"</strong></p>
Соответственно, мы увидим:
Здесь текст
Здесь код C++ с текстом "#include
Если заменить все "<", то вместо отформатированного текста мы увидим "<p>Здесь текст</p><p><strong>Здесь код C++ с текстом"... Поэтому в тэгах символы "<" и ">" должны остаться нетронутыми, а вне тэгов - быть преобразованными в коды. | |
|
|
|
|
|
|
|
для: GreenPiece
(17.01.2012 в 23:44)
| | Лучше вот как поступить, сначала заменить все <p> и </p> на [p] и [/p], со спокойной душой заменить < на <, а > на >, а потом заменить [p] и [/p] снова на <p> и </p>. | |
|
|
|
|
|
|
|
для: 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("<" => "<", ">" => ">"));
$pat = "#<(/?)(p|strong)(.*?)>#is";
$s = preg_replace($pat,"<$1$2$3>",$s);
echo $s;
?>
| И в $pat в (p|strong) нужно через | перечислить все теги, которые у вас встречаются.
Может кто предложит лучше, но для начала и так работает. | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2012 в 00:08)
| | Спасибо большое!
Немного доработал под свою задачу - и все получилось. | |
|
|
|