Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696

Проверка тегов на закрытие

02.02.2015, 19:34. Показов 8952. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать проверку на "закрытость" тегов вводимых в textarea. Изначально есть проверка неразрешенные к использованию и не разрешенные теги. Но как сделать проверку на закрытость тегов (вводимых)? Подскажите пожалуйста, как сделать так чтобы какой либо из тегов (ul, li и т. д.) не закрыт, то выводилась команда:
PHP
1
return exit("Вы не закрыли один или несколько html тегов!");
Вот код проверки на разрешенные и неразрешенные html теги (на всякий пожарный):
PHP
1
2
3
4
 $new_data = strip_tags($_POST['text'], '<ol><ul><li><em><u><b>'); //список разрешенных для ввода тегов
        if(mb_strlen($_POST['text']) !== strlen($new_data)){
            return exit("<p class='links'><span  style='color:red;'>Не используйте запрещенный html!</span><br>Можно использовать как теги только: <br> <b>, <u>, <em>, <ul>, <li>, <ol>. <br>Вернитесь и исправьте свою ошибку <a href='javascript:history.go(-1)'>здесь</a>.</p>");
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2015, 19:34
Ответы с готовыми решениями:

Проверка на правильность мест закрытия тегов
Есть textarea в которую можно вводить только определенные html теги. Есть проверка на разрешенные и неразрешенные теги (введенные). Затем...

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

Проверка тегов XML на наличие дочерних тегов
Доброго времени суток. Вот часть файлика которого мне нужно считать... &lt;?xml version=&quot;1.0&quot;...

11
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
02.02.2015, 19:56
Цитата Сообщение от Mikhail Shell Посмотреть сообщение
Как сделать проверку на "закрытость" тегов вводимых в textarea.
Нужно написать функцию которая будет это проверять. Я Думаю тут идеально подойдёт preg_match_all(). Потом посчитать массивы с открывающими и закрывающими тэгами. Если массивы не равны, то вернуть FALSE
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
02.02.2015, 20:11
Может стоит HtmlPurifier поюзать?) Как считаете?
0
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
02.02.2015, 20:14  [ТС]
BarbosLV, я программист php не ахти, немного не понимаю как это все должно быть. Вот есть объявление функции:
PHP
1
2
function closing_html()//называться будет closing_html
{
А в ней что?
0
Нет ТЗ - давай досвидания
 Аватар для BuPy7
746 / 377 / 64
Регистрация: 01.12.2011
Сообщений: 2,250
Записей в блоге: 6
02.02.2015, 20:16
Цитата Сообщение от Mikhail Shell Посмотреть сообщение
А в ней что?
магия

PHP
1
2
3
function closing_html(){
//трах-тибидох,проверь мне теги
}
1
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
02.02.2015, 20:20
Цитата Сообщение от Mikhail Shell Посмотреть сообщение
А в ней что?
Цитата Сообщение от BuPy7 Посмотреть сообщение
магия


Значит пост из серии сделайте за меня?
0
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
03.02.2015, 17:29  [ТС]
Цитата Сообщение от BarbosLV Посмотреть сообщение
Потом посчитать массивы с открывающими и закрывающими тэгами. Если массивы не равны, то вернуть FALSE
BarbosLV, у меня проверка на неразрешенные теги сначала идет без массива, а как надо преобразовать эту проверку в проверку с массивом.
Я попробовал, но не получилось. Скажите пожалуйста, что не так!
Вот код:
PHP
1
2
3
4
5
6
    $tags = array('<ol>', '<ul>', '<li>', '<em>', '<u>', '<b>');
        
        $new_data = strip_tags($_POST['text'], $tags);
        if(mb_strlen($_POST['text']) !== strlen($new_data)){
            return exit("<p class='links'><span  style='color:red;'>Не используйте запрещенный html!</span><br>Можно использовать как теги только: <br> <b>, <u>, <em>, <ul>, <li>, <ol>. <br>Вернитесь и исправьте свою ошибку <a href='javascript:history.go(-1)'>здесь</a>.</p>");
        }
Проблема в том, что это условие всегда срабатывает.
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.02.2015, 18:14
Вот тебе для начала:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//приготовим функцию
function magija($s, $a)
    {
        foreach($a as $item)
            {
                echo 'В нашей строке есть '.substr_count($s, "<$item>").' шт. <b>'.htmlspecialchars("<$item>").'</b>. И '.substr_count($s, "</$item>").' шт. <b>'.htmlspecialchars("</$item>").'</b>.<br>';
            }
    }
// зададим переменные
$str = '<div>Hello <b>world!</b> <b>world!</b> ;)</div>';
$str2 = '<div>Hello <b>world!</b> ;)';
$tags = array('b','div');
// опробуем функцию
echo magija($str, $tags);
echo '<br>';
echo magija($str2, $tags);
0
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
03.02.2015, 19:19  [ТС]
BarbosLV, я написал:
PHP
1
2
3
4
5
6
7
8
9
10
        $tags = array('b','u');
 
        function magija($s, $a)
        {
            foreach($a as $item)
                {
                echo 'В нашей строке есть '.substr_count($s, "<$item>").' шт. <b>'.htmlspecialchars("<$item>").'</b>. И '.substr_count($s, "</$item>").' шт. <b>'.htmlspecialchars("</$item>").'</b>.<br>';
                }
                echo magija($text, $tags);
        }
Только не совсем понимаю, что за переменная $s или переменная $a.
Кстати у меня выдает ошибку:
Parse error: syntax error, unexpected T_ELSE in /home/u712120233/public_html/otpravka.php on line 147
так понимаю что то с else, но что
Когда добавляю else в комменты (/**/) все норм, а как "раскоменнтю" так, ошибка.
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.02.2015, 19:24
Чё такое функция
0
433 / 352 / 259
Регистрация: 29.11.2011
Сообщений: 628
03.02.2015, 20:07
Лучший ответ Сообщение было отмечено Mikhail Shell как решение

Решение

PHP
1
function closing_html(){ //трах-тибидох,проверь мне теги }
PHP
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
<?
function closing_html($html) 
{
    preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
    $openedtags = $result[1];
    preg_match_all('#</([a-z]+)>#iU', $html, $result);
    $closedtags = $result[1];
    $lenOpened = count($openedtags);
    if (count($closedtags) == $lenOpened)
        return true;
    $openedtags = array_reverse($openedtags);
    $countTags = 0;
    for ($i = 0; $i < $lenOpened; $i++)
        if (!in_array($openedtags[$i], $closedtags))
            $countTags++;
    return ($countTags) ? false : true;
} 
 
$html = '<p>text<strong>text<div>text</p>';
 
if (!closing_html($html)) 
    return exit("Вы не закрыли один или несколько html тегов!");
else
    return exit("Все хорошо!");    
?>
1
52 / 52 / 39
Регистрация: 15.11.2014
Сообщений: 696
03.02.2015, 21:46  [ТС]
LASSO, спасибо за помощь!

Добавлено через 8 минут
LASSO, а если наоборот есть закрывающий, а нет открывающего?
P.S. Здесь проверяет только на наличие закрывающего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2015, 21:46
Помогаю со студенческими работами здесь

Закрытие тегов
Почему можно не закрывать тег &lt;/li&gt; ?

Как в DHTMLEdit отключить автоматическое закрытие незакрытых тегов?
Этот &quot;умный&quot; редактор сам добавляет недостающие закрывающие тэги. Каким свойством можно это отключить если конечно возможно? Я что-то не...

проверка корректности тегов
такая вот штука приключилась. пытаюсь проверить свой сайт на корректность кейвордов, тегов и пр. на promolab.ru/free но мне выдается , что...

Проверка закрытия тегов
Добрый день, уважаемые форумчане. Столкнулся с проблемой: когда контент-менеджер пишет статьи, он использует html-разметку и иногда...

Проверка закрывания тегов с использованием стека
Уважаемые программисты!!! Помогите пожалуйста с программой, у девушки экзамен, а ее не допустят пока лабу не сдаст, а сам я чуть выше нуля...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru