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.










