Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

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

 

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

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

тема: Еще раз о ВВ
 
 автор: Николай2357   (02.07.2008 в 00:01)   письмо автору
 
 

Здравствуйте.
Вот встала задача сделать простенькую админку для сайта, чтобы владелец мог сам менять контент, незадуряясь HTML. У меня вопрос, зачем закрывают ВВ теги? Чтобы проверить четность, или есть еще подвох? Ведь гораздо проще разобрать строку по одинаковым маркерам. Все равно 99% полбзуются кнопкой вставки тегов. А для админки вообще не вопрос - кривой дизайн, это проблемы владельца сайта.
Или я чего-то важного недопонимаю?
Спасибо.

   
 
 автор: Trianon   (02.07.2008 в 00:05)   письмо автору
 
   для: Николай2357   (02.07.2008 в 00:01)
 

.Вообще-то они могут быть вложены. Как минимум - в теории.

   
 
 автор: Николай2357   (02.07.2008 в 00:19)   письмо автору
 
   для: Trianon   (02.07.2008 в 00:05)
 

Я наверное попробую на практике. Нет смысла городить огород из регулярок, чтобы избежать одной ошибки на 1000 вводов. Посмотрю, как получится. В теории начало следующего такого же тега закроет предыдущий, а при форматировании текста большинство тегов вкладываются друг в друга. Жаль будет времени, если не сработает. Может кто-нибудь сталкивался и знает подводные камни?

   
 
 автор: Эй   (02.07.2008 в 01:51)   письмо автору
 
   для: Николай2357   (02.07.2008 в 00:19)
 

Допустим мне нужно выделить часть текста жирным. Как без закрывающего тега обозначить конец выделения?

   
 
 автор: exp   (02.07.2008 в 03:54)   письмо автору
 
   для: Николай2357   (02.07.2008 в 00:19)
 

> подводные камни

при интерпритации второго открывающего тега как закрывающего,
невозможно внутри блока нарисовать открываюший тег , как и закрывающий если в шаблоне что-то типа \[/?TAG\]
а так , только закрывающий проинтерпретирует
вложенность можно использовать для неинтерпритации

   
 
 автор: Николай2357   (02.07.2008 в 08:13)   письмо автору
 
   для: exp   (02.07.2008 в 03:54)
 

Да вот, собственно, и времени то не понадобилось много:
<?
//Подготовка
if(isset($_POST['ok'])))
$cont=$_POST['message'];
$cont=stripslashes($cont);
$cont=htmlspecialchars($cont);
// Меняю \n на <br />
$contus=explode("\n",$cont);
$ms=count($contus);
for(
$i=0$i<$ms$i++){
$mesf.=$contus[$i]."<br />";
}
//А вот так выделяется жирным:
$line=explode("[B]",$mesf);
$cl=count($line);
for(
$i=0$i<$cl$i++){
$lin=$line[$i];
if(
$i%2!=""){$lin="<b>$line[$i]</b>";
if(
$line[$i]==""){$lin="";
}
}
$lib.=$lin;
}
//А так красным
$line=explode("[RED]",$lib);
$cl=count($line);
for(
$i=0$i<$cl$i++){
$lin=$line[$i];
if(
$i%2!=""){$lin="<span  style=\"color:red\">$line[$i]</span>";
if(
$line[$i]==""){$lin="";
}
}
$lired.=$lin
}

//А так картинку можно вставить, только загрузить сначала нужно
$line=explode("[IMGL]",$lired);
$cl=count($line);
for(
$i=0$i<$cl$i++){
$lin=$line[$i];
if(
$i%2!=""){$lin="<img src=../images/$line[$i] align=left hspace=5px vspace=5px border=0 />";
if(
$line[$i]==""){$lin="";
}
}
$liimgl.=$lin
}
?>

Я уже около 30-ти тегов попробовал, и заголовки, и линию рисует и даже списки делает.
Пока вроде нормально. Ну если тег не закрыть, он и будет открыт до конца блока, потом все равно закроется. Так ведь это проблемы юзера. Пользуйся кнопкой, всегда будет пара. Если один тег вложить в другой такой же, середина исключается и все. Играюсь, пока вроде все работает, может кто найдет тонкое место, а то сдам заказчику, потом стыдно будет.

ЗЫ. Просто не хочется с регулярками лишний раз связываться, я с ними на Вы пока.

   
 
 автор: BinLaden   (02.07.2008 в 10:55)   письмо автору
 
   для: Николай2357   (02.07.2008 в 08:13)
 

> Так ведь это проблемы юзера

При таком отношении к юзерам, я Вас уверяю, проблемы будут Ваши.

   
 
 автор: Николай2357   (02.07.2008 в 12:13)   письмо автору
 
   для: BinLaden   (02.07.2008 в 10:55)
 

>При таком отношении к юзерам, я Вас уверяю, проблемы будут Ваши.

Я ведь написал, что это для админки, уж одному человеку я сумею объяснить, что и как.
Мне гораздо важнее сроки и количество используемых тегов, а с регулярками придется долго возиться.

   
 
 автор: Эй   (02.07.2008 в 12:11)   письмо автору
 
   для: Николай2357   (02.07.2008 в 08:13)
 

На то он и интерфейс, чтобы оградить юзера от всяческих проблем и пояснить где и что юзер сделал не так.

   
 
 автор: Николай2357   (02.07.2008 в 12:15)   письмо автору
 
   для: Эй   (02.07.2008 в 12:11)
 

А кроме этого есть еще какие нибудь подвохи?

   
 
 автор: exp   (02.07.2008 в 14:12)   письмо автору
 
   для: Николай2357   (02.07.2008 в 12:15)
 

<? 
list($headtime$time) = explode(chr(32), microtime());
$headtime = ($time $headtime);

// эмуляция $cont
$cont=str_repeat(
'text[IMGL]picture[IMGL]text
text [RED]redtext[RED] text
text [B]boldtext[B] text
'
1500);

//жирным: 
$cont=explode("[B]"nl2br($cont)); 
$ms=count($cont);
 
$mesf'';
for(
$i=0$i<$ms$i++){ 
if(
$i&1)$mesf .= $cont[$i];
else 
$mesf .= '<b>' $cont[$i] .'</b>';
}
//красным 
$cont=explode("[RED]",$mesf); 
$ms=count($cont);
$mesf'';
for(
$i=0$i<$ms$i++){ 
if(
$i&1$mesf .= $cont[$i];
else 
$mesf .= '<span  style="color:red">' $cont[$i] .'</span>'
}
// картинку
$cont=explode("[IMGL]",$mesf); 
$ms=count($cont);
$mesf'';
for(
$i=0$i<$ms$i++){ 
if(
$i&1$mesf .= $cont[$i];
else 
$mesf .= '<img src=../images/' $cont[$i] . ' align=left hspace=5px vspace=5px border=0 />';

 list(
$msec$time) = explode(chr(32), microtime()); 
 echo  
'<hr/>[_' round(($time $msec) - $headtime4)
    . 
's_]' "\n";
?>


<? 
list($headtime$time) = explode(chr(32), microtime());
$headtime = ($time $headtime);

function 
bbr($cont$tag$start$end) {
 
$mesf '';
 
$cont explode("\n",$cont);
 for(
$i 0$i count($cont); $i ++){
 if(
$i&1$mesf .= $cont[$i];
 else 
$mesf .= $start $cont[$i] .$end;
}
 return 
$mesf;
}

// эмуляция $cont
$cont=str_repeat(
'text[IMGL]picture[IMGL]text
text [RED]redtext[RED] text
text [B]boldtext[B] text
'
1500); 

//жирным: 
//красным 
//картинку 
$cont=bbr(nl2br($cont), '[IMGL]''<img src=../images/'' align=left hspace=5px vspace=5px border=0 />');
$cont=bbr($cont'[RED]''<span  style="color:red">''</span>');
$cont=bbr($cont'[B]''<b>''</b>');
 

 list(
$msec$time) = explode(chr(32), microtime()); 
 echo  
'<hr/>[_' round(($time $msec) - $headtime4)
    . 
's_]' "\n";
?>

и всётаки второе иногда работает быстрее , хоть и говорят что вызов функции "обходится дороже"
прямого написания

   
 
 автор: Николай2357   (02.07.2008 в 14:49)   письмо автору
 
   для: exp   (02.07.2008 в 14:12)
 

Так круче, попробую.
А что значит "обходится дороже"?

   
Rambler's Top100
вверх

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