Retorno: TRUE se houver tags quebradas, FALSE se não.
Descrição:
Uma função que pode ser útil para algum formulário que use bbcode ou htmlcode. Por exemplo, usando broken_tags("<b>Esse é um texto!</u>") irá retornar TRUE, broken_tags("<b>Esse é um texto!</b>") retorna FALSE; previnindo usuários de mandarem comentários/etc com tags quebradas assim prejudicando o resto da página.
OBS: Tags como <img> que não tem um fechamento, deve ser usadas assim: <img src="..." />
Para usá-la em bbcode, troque todos os <> por [].
Exemplo de uso:
<? if (!$_POST['form']) { echo '<form action="" method="post"> <textarea name="mensagem"></textarea> <input type="submit" name="form" value="Enviar"> <input type="reset" value="Limpar">'; } else { if (broken_tags($_POST['mensagem'])) { die('Há tags quebradas no texto!') } else { echo $_POST['mensagem']; } } ?>
Função:
<?php function broken_tags($str) { preg_match_all("/(<\w+)(?:.){0,}?[^\/]>/", $str, $v1); preg_match_all("/<\/\w+>/", $str, $v2); $open = array_map('strtolower', $v1[1]); $closed = array_map('strtolower', $v2[0]); foreach ($open as $tag) { $end_tag = preg_replace("/<(.*)/", "</$1>", $tag); if (!in_array($end_tag, $closed)) return true; unset($closed[array_search($end_tag, $closed)]); } return false; } ?>
Edição feita por: Dudu, 02/09/2009, 20:52.