Jump to content


Photo

Broken_tags()


  • Faça o login para participar
Nenhuma resposta neste tópico

#1 Magus_

Magus_

    Normal

  • Usuários
  • 70 posts
  • Sexo:Masculino
  • Localidade:Braga / SP

Posted 12/06/2009, 08:07

Sintaxe: broken_tags( string $str )
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.





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq