Рейтинг@Mail.ru
 

Шаг 6

BB - теги

Как говорится - взялся за гуж - полезай в кузов. Нам надо что бы была не просто книжка. А что б Книжка!

Что нам стоит снабдить эту цацку ВВ тегами и смайликами? Напишем ка мы такую красивую функцию.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<?php


/**   
* The guest book   
* Гостевая книга   
* @author IT studio IRBIS-team   
* @copyright © 2009 IRBIS-team   
*/   
/////////////////////////////////////////////////////////   
/**   
* We establish the charset and level of errors   
* Устанавливаем кодировку и уровень ошибок   
*/   
    
header("Content-Type: text/html; charset=utf-8");   
    
error_reporting(E_ALL);  

     
///////////////////////////////////////////////////////////// 
//                       FUNCTIONS 
//                        ФУНКЦИИ 
/////////////////////////////////////////////////////////////     
      
/**     
* bb-tags and smilies replacement function     
* Функция замены bb-тегов и смайликов  
* @param string  
* @return string    
*/ 
    
function bb_tags($text
    {   
       
// Создаем массив bb-тегов 
        
$bb = array(
                    
'[B]'
                    
'[/B]'
                    
'[I]'
                    
'[/I]'
                    
'[S]'
                    
'[/S]'
                    
'[U]'
                    
'[/U]'
                    
'[:)]'
                    
'[:(]'
                    
'[;)]'
                    
'[:D]' 
                   
);  
       
// Создаем массив тегов HTML 
        
$tag = array(
                     
'<b>'
                     
'</b>'
                     
'<i>'
                     
'</i>'
                     
'<s>'
                     
'</s>'
                     
'<u>'
                     
'</u>',  
                     
'<img src="smiles/1.gif" />'
                     
'<img src="smiles/2.gif" />',  
                     
'<img src="smiles/3.gif" />'
                     
'<img src="smiles/4.gif" />' 
                
); 
        
// Заменяем элемент первого на элемент второго массива соответственно                 
        
return str_ireplace($bb$tag$text);             
    } 
     
         
///////////////////////////////////////////////////////////////// 
//                        VARIABLES 
//                        ПЕРЕМЕННЫЕ 
///////////////////////////////////////////////////////////////// 
         
    
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : null;   
    
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : null;  
    
$info  = array(); 

         
///////////////////////////////////////////////////////////////// 
//                        SCRIPT 
//                        СКРИПТ 
/////////////////////////////////////////////////////////////////  

    
if(!empty($_POST['ok']))   
    {   
        if(!
$text1)   
            
$info[] = 'Текстовое поле не заполнено.'
               
        if(!
$text2)   
            
$info[] = 'Текстовая область не заполнена.';  
              
        if(
count($info) == 0
        {   
             if(
file_exists('text.txt')) 
             {    
                 
$posts unserialize(file_get_contents('text.txt')); 
                 
$keys array_keys($posts); 
                 
$id max($keys) + 1
             } 
             else 
                 
$id 1
                         
            
$posts[$id]['date'] = date('d-m-Y'); 
            
$posts[$id]['name'] = $text1
            
$posts[$id]['mess'] = $text2;                         
             
            
file_put_contents('text.txt'serialize($posts));   

            
header('location: http://'$_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);   
            exit();   
        }   
    }   
    else   
        
$info[] = 'Напишите что-нибудь';
   
///////////////////////////////////////////////////////////////// 
//                        VIEW 
//                    ОТОБРАЖЕНИЕ 
/////////////////////////////////////////////////////////////////
?>   
<form action="" method="post">   
Логин:<br />   
<input name="text1" type="text" value="<?php echo htmlspecialchars($text1?>"/><br />   
Сообщение:<br />   
<textarea name="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2);?></textarea><br />   
<input name="ok" type="submit" />   
</form>   
<?php   

    
echo implode('<br>'$info) .'<br>';  

    if(
file_exists('text.txt')) 
    { 
        
$posts unserialize(file_get_contents('text.txt')); 
                 
        foreach(
$posts as $id => $post
        { 
            
$date $post['date'];         
            
$name htmlspecialchars($post['name']);
           
// Обрабатываем функцией замены тегов текст сообщения 
            
$mess nl2br(bb_tags(htmlspecialchars($post['mess'])));                 
?>         
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; padding:5px">         
<?php echo $date?> / <strong><?php echo $name?></strong> 
<hr width="30%" align="left" /> 
<?php echo $mess?> 
</div> 
<?php 
         
}  
    }
Не трудно догадаться, что функция str_ireplace() заменяет элемент первого массива на соответствующий элемент второго. Есть еще функция str_replace(), без i. Она делает тоже самое, но учитывает регистр. А нам нужно, что бы и такие [b][/b] и такие [B][/B] теги работали нормально. По этому регистр мы проигнорируем.
Кстати, эти функции работают и просто со строками, не обязательно массив.
1
2
3
4
5
6
7
<?php


    $text 
'мат перемат, мать твою.'
    echo 
str_replace('мат''пи-и-и'$text);

Осталось положить рядом со скриптом папку со смайликами и все будет замечательно.

Правда до тех пор, пока благодарных пользователей не наберется столько, что браузер не сможет открыть страницу.
В таком случае необходима постраничная навигация, или по русски - листалка.