Forum Webscript.Ru

Программирование => PHP => Тема начата: Гаррилл от 25 Августа 2002, 14:50:52

Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 14:50:52
Я пробовал так:
$content = preg_replace(\'#([\\/]?.*?)>\\n#is\', "\\n", $content);
Всё из-за того, что ниже стоит ещё нужный
$content = \'\' . str_replace("\\n", "\\n
\\n", $content);

Думааю, поннятно зачем нижний реплейс, а вот верхний нужен для того, чтобы такие данные в базе как эти


 
   
   
   

сидели на месте.
Ведь неудобно неразделять строчки. А вот мне нужно реплейсить каждый закрывающий тэг ">" с "\\n" на ">".
Как организовать? #([\\/]?.*?)>\\n ...?
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: GotZfild от 25 Августа 2002, 16:14:38
Ой-ё. Так, первого сенятбря все в школу - русский язык учить.
Сначал я долго думал, что означает загадочное слово
Цитировать
njkmrj
, пока не посмотрел на клаву и не понял, что это "только".
Тебе нужно, чтобы производилась замена, напр., \\n на просто ?
Тогда так

$content = preg_replace("!(<[^>]+>)\\\\n!", "\\\\\\\\1", $content);
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 17:00:45
Цитировать
njkmrj

:D поменял.
Такой способ не выходит.
Цитировать
Тебе нужно, чтобы производилась замена, напр., \\n на просто ?

Не совсем так. Нужно, чтобы и "border="1" width="100%">\\n" менялся на "border="1" width="100%">"
Т.е. всё ">\\n" менялось на ">".

Т.к. при постинге ставить такую фигню как расширенный, не расширенный режимы форматирования если ставить, то выйдет криво. А тут конструкцию придумать не могу.
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: ThE0ReTiC от 25 Августа 2002, 17:06:53
Гаррилл
Ты сам только что на свой вопрос ответил:
$string = str_replace(">\\n",">",$string);
Цитировать

[Editor\'s note: see also nl2br(), a function that does exactly this]
If you want to make it really HTML friendly with the formatting intact use:
$text = str_replace("\\n","
",$text);
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 17:27:52
Цитировать
$string = str_replace(">\\n",">",$string);

Не работает.
Цитировать
$text = str_replace("\\n","
",$text);

Это и пню понятно. В остальных случаях $content = \'\' . str_replace("\\n", "\\n
\\n", $content); нужно для обычных абзацев с помощью "Enter", а не
. Не надо этой замены только в том случае, когда \\n стоит после завершающей скобки >.

Код выглядит так:
$content = ( $blocksdata[\'block_content\'] != \'\' ) ? $blocksdata[\'block_content\'] : \'\';
$content_bbcode_uid = $blocksdata[\'bbcode_uid\'];

if ( !$blocksdata[\'enable_html\'] )
{
$content = preg_replace(\'#(<)([\\/]?.*?)(>)#is\', "<\\\\2>", $content);
}

if ( $blocksdata[\'enable_bbcode\'] )
{
$content = bbencode_second_pass($content, $content_bbcode_uid);
}

if ( $blocksdata[\'enable_smilies\'] )
{
$content = smilies_pass($content);
}

$content = preg_replace("/\\:(([a-z0-9]:)?)$content_bbcode_uid/si", \'\', $content);

$content = str_replace(">\\n",">",$content);

$content = \'\' . str_replace("\\n", "\\n
\\n", $content);

$content = make_clickable($content);

$template->assign_vars(array(
\'BLOCK_TITLE\' => $blocksdata[\'block_title\'],
\'BLOCK_CONTENT\' => $content
));

Это кусок из моего мода к phpbb. Я просто блоки туда прикрутил как у нюк, только намного круче и продуманней.
А сейчас просто мозги пришибло. Не могу эту мелочь устранить.
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 17:38:13
Эта длинная строка в моей мессаге выше - не моя. Это замена на форуме произошла. На самом деле она такая :
$content = preg_[пробел]replace("/\\:(([a-z0-9]:)?)$content_[пробел]bbcode_uid/si", \'\', $content);
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 18:53:38
Я и сам решил проблему
$content = preg_replace("\'([^>][\\n])+\'si","\\\\2",$content);
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: GotZfild от 25 Августа 2002, 19:06:17
Не понял....
А при чем здесь \\\\2?
PS. Модификаторы в реге ни к чему.
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 20:08:26
Цитировать
$content = preg_replace("\'([^>][\\n])+\'si","\\\\2",$content);

Блин, не работает тоже.
Как менять все ">\\n" на ">"
Помогите. Не получается ничего.
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Макс от 25 Августа 2002, 21:10:24
Цитировать
Как менять все ">\\n" на ">"

Может у тебя \\r\\n?
Тогда
$text = str_replace(">\\r\\n",">",$text);
Название: Нужно поменять окончание тэгов + \\n на только окончание тэгов. Не выходит.
Отправлено: Гаррилл от 25 Августа 2002, 21:48:20
Макс
Ооо. Спасибо. Спасибо, что надоумил.
Совсем я сдурел. Четыря дня не сплю то из-за чёртового PHP :) (но как же без игрушки), то из-за похорон :(. Ну да ладно. Спасибо.
А я думал, ну какого фига не работает
$text = str_replace(">\\n",">",$text); , а \\r всё время вспоминалась и забывалась.