Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заменить /n, которые не находятся внутри [list][/list 
:(
    Опции темы
NLspieler
Дата 11.6.2010, 16:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 1
Всего: 19



ksnk абсолютно прав.
Нужно найти все 
Код

[list]...[/list]
 и заменить все их на специальные текстовые ссылки на массив,
в который сохранить их содержимое.
Потом произвести замену \n при помощи str_replace. 
После чего заменить текстовые метки обратно на сохраненные листы из массива.

Первая сложность, которая совсем и не сложность - это найти эти самые листы при помощи регулярки.
Но тут возникает вопрос, может ли тег list иметь атрибуты и если да, то в каком формате.
Если нет, то регулярка будет выглядеть намного проще.

Вторая проблема: Возможны ли такие случаи, что в теге лист могут находиться другие теги лист? И если да, то что делать в таких случаях?
(кстати только тогда подадобится цикл - всего одни, иначе же никакие циклы совсем не нужны)



Это сообщение отредактировал(а) NLspieler - 11.6.2010, 16:50
PM MAIL   Вверх
bars80080
Дата 11.6.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Цитата(NLspieler @  11.6.2010,  16:49 Найти цитируемый пост)
Но тут возникает вопрос, может ли тег list иметь атрибуты и если да, то в каком формате.
да, может. то есть либо [ list], либо [ list=(1|a|I)]

Цитата(NLspieler @  11.6.2010,  16:49 Найти цитируемый пост)
Возможны ли такие случаи, что в теге лист могут находиться другие теги лист?

вообще, нет. внутренний цикл - это ошибка, в результате текст как-то поедет, но это уже проблема пользователей
PM MAIL WWW   Вверх
NLspieler
Дата 11.6.2010, 20:44 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 1
Всего: 19



Вот что получилось, вроде работает.
Правда без массивов обойтись не получилось
Код

<?php

$text = "hallo hallo \n [list atr=111]slkd
jflksjdf\nsdfsdf[/list] wei
ter [list]klsdf[/list]dfgdfgdfg
dfgdfgdfgdfg" ;

echo n_p ($text) ;

function n_p ($text)
{
    //Убираем переводы каретки, которые не нужны, но будут мешать
    $text = str_replace ("\r" , '' , $text) ; 
    
    //Ищем листы и сохраняем в массив
    $reg = '|\[list.*\].*\[/list\]|isU' ;
    preg_match_all ($reg , $text , $matches) ;
    $lists = $matches[0] ;
    
    //Меняем листы на метки
    foreach ($lists as $key => $value)
    {
        $text = str_replace ($value , '||#|' . $key . '|#||' , $text) ;
    }

    //Теперь заменяем \n на </p>\n<p>
    $text = str_replace ("\n" , '</p>' . "\n" . '<p>' , $text) ;

    //Производим обратную замену меток на соответствующие листы
    foreach ($lists as $key => $value)
    {
        $text = str_replace ('||#|' . $key . '|#||' , $value , $text) ;
    }

    return $text ;
}
?>

PM MAIL   Вверх
Kano
Дата 18.6.2010, 13:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 23.2.2009

Репутация: нет
Всего: 0



NLspieler, надо ли говорить, что код некорректен? Зачем писать ###код? Если в тексте будет "||#|0|#||"?
PM MAIL   Вверх
bars80080
Дата 18.6.2010, 16:27 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Цитата(Kano @  18.6.2010,  13:35 Найти цитируемый пост)
Если в тексте будет "||#|0|#||"?

значит, использовать другую комбинацию.

да и вероятность, что в обычном тексте на самом деле будет использоваться такая комбинация - ничтожна мала
PM MAIL WWW   Вверх
bars80080
Дата 18.6.2010, 22:08 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Цитата(Kano @  18.6.2010,  13:35 Найти цитируемый пост)
надо ли говорить, что код некорректен?

кстати, так и не услышал, почему код не корректен?

Это сообщение отредактировал(а) nerezus - 19.6.2010, 08:32
PM MAIL WWW   Вверх
SickFxck
Дата 18.6.2010, 22:35 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: 1
Всего: 1



Цитата(bars80080 @  18.6.2010,  22:08 Найти цитируемый пост)
кстати, так и не услышал, почему код не корректен? 

— ожидаемые данные не совпадают с фактическими. Непонятно, да?


Это сообщение отредактировал(а) nerezus - 19.6.2010, 08:32
PM MAIL   Вверх
bars80080
Дата 18.6.2010, 23:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Цитата(SickFxck @  18.6.2010,  22:35 Найти цитируемый пост)
— ожидаемые данные не совпадают с фактическими. Непонятно, да?

в смысле не совпадает? вводим правило: пользователю запрещено использовать комбинацию "||#|0|#||"
всё, ожидаемый результат совпадает с фактическим.


Это сообщение отредактировал(а) nerezus - 19.6.2010, 08:32
PM MAIL WWW   Вверх
SickFxck
Дата 19.6.2010, 00:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: 1
Всего: 1



Цитата(bars80080 @  18.6.2010,  23:49 Найти цитируемый пост)
в смысле не совпадает? вводим правило: пользователю запрещено использовать комбинацию "||#|0|#||"
всё, ожидаемый результат совпадает с фактическим.

— не можем справиться с проблемой — сделаем вид, что её нет! smile

P.S. Я тебе даже подскажу: экранирование надо применять, ага.

Это сообщение отредактировал(а) SickFxck - 19.6.2010, 00:50
PM MAIL   Вверх
bars80080
Дата 19.6.2010, 10:24 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



Цитата(SickFxck @  19.6.2010,  00:33 Найти цитируемый пост)
не можем справиться с проблемой — сделаем вид, что её нет!

с какой проблемой не справились?

и так и не услышал, почему код не корректен?

Цитата(SickFxck @  19.6.2010,  00:33 Найти цитируемый пост)
Я тебе даже подскажу: экранирование надо применять, ага.

зачем?
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0821 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.