Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vdepizzol

BBcode especial

Recommended Posts

Oi,

 

estou fazendo um tipo de "bbcode" pra o meu sistema de conteúdo do meu site. Gostaria, que, ao digitar entre as tags [*HTML] e [*/HTML], a pessoa pudesse adicionar código html, e que, ao digitar fora dessas tags, o html não seja ativado. Ex.:

 

<b>Isto não ficaria negrito, ficaria como texto</b>[B]Isto ficaria negrito[/B][*HTML]<font face="Verdana" size="2">Exemplo</font>[*/HTML]
A minha idéia seria fazer com que, todos os caracteres ">" e "<" q estivesse fora das tags [*HTML] e [*/HTML], virassem < e >... mas como?

 

usei o * para o forum nao visualizar errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se está certo, mas tenta fazer isso com algum dos dois exemplos aí:str_replace("<","&lt",$msg);ouPreg_replace("/\[html\](.*?)\[\/HTML\]/i",'<html>\\1</html>",$msg);até

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que tiver fora das tags que você escolheu você usa htmlentities() e só usar ER pra formatar dentro das tags, se precisar de ajuda posta ai eu faço essas tags do invision

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo, não sei bem como usar a função htmlentities() fora das tags [*HTML] e [*/HTML]....

 

Se tiver como ajudar... agradeço :)

 

P.S.: Não daria certo, Cyber-not, eu quero que, apenas o q estiver fora das tags [*HTML] e [*/HTML] não virem html...

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu tentei aqui mais nao consegui nao :S

 

acho que o unico jeito é fazer tag por tag mesmo, ou eu sou muito burro, fiquei uns 30 minutos aqui tentando e nao consegui =/

 

a melhor solucao que achei:

 

<?

 

$str01 = "esse texto em vermelho via bbcode";

$str02 = "<font color='#FF0000'>texto em vermelho via html</font>";

 

function troca($string){

  $string = strip_tags($string);

  $string = preg_replace("/\[color:(.*?)\](.*?)\[\/color\]/si","<font color='\\1'>\\2</font>", $string);

  return $string;

}

 

echo troca($str01);

echo "<br>";

echo troca($str02);

 

?>

ve se ajuda, malz ai, mais nao consegui bolar nada melhor =[

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 você cria uma função pra colorir o html e depois você chama a função apartir da ER

 

$txt = preg_replace( "#\[html\](.+?)\[/html\]#ies",  funcao_colorir('\\1')", $txt );

 

e fora das tags html só usar htmlentities()

 

ou se você nao conseguir você pode fazer assim:

 

$txt = htmlentities(($_POST["script"]);

 

e dentro da funcao pra colorir você usa a função html_entity_decode

 

qualquer duvida posta ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Fabyo! Valeu pela ajuda... mas nao funcionou http://forum.imasters.com.br/public/style_emoticons/default/no.gif

 

Olha o q eu fiz:

 

PHP

[*]$mensagem = "<b>Isso ficaria não ficaria como negrito, ficaria como texto</b>

[*]

[*][*HTML]<b>Isso ficaria negrito</b>[*/HTML]";

[*]

[*]$mensagem = htmlentities($mensagem);

[*]

[*]// 

	

[*]function html($var) {

[*] return html_entity_decode($var);

[*]}

[*]

[*]$mensagem = preg_replace("/\[html\](.*?)\[\/HTML\]/si", html("\\1"), $mensagem); 

[*]

 

Na ultima linha, também tentei assim:

 

PHP

[*]$mensagem = preg_replace("/\[html\](.*?)\[\/HTML\]/si", html_entity_decode("\\1"), $mensagem);

 

Mas não aconteceu nada... os < e > continuaram sendo < e >

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao é assim que você deve fazer ,olha ve se da pra entender +-:

 

 

$mensagem = htmlentities($mensagem);

 

nessa funcao que você tem que tratar os caracteres pra mudar de cor

por exemplo:

 

function html($var) {

 

$var = preg_replace("~()~", "\\1", $var);

e você pode ir colocando varias funções pra colorir o que quiser

 

}

   

$mensagem = preg_replace("/\[html\](.*?)\[\/HTML\]/si", html("\\1"), $mensagem);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não quero colorir o html... eu quero validar ele... entendeu?Se a pessoa digitar, por exemplo "<br>" fora das tags [*HTML] [*/HTML], o "<br>" vai sair como "<br>"... se digitar dentro, ele quebra a linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade, não é que seje dificil, é que nao tem a menor logica isso que voce quer... porque , se é para liberar html, porque so pode liberar html dentro de tag

 ?se é para liberar, libera tudo... o que custumam fazer com bbcode, é bloquear html e liberar apenas as tags quie voce quer, cor/b-i-s/etcentendeu o que digo?[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que... se a pessoa digitar, por exemplo o seguinte:

5 é maior que 4, ou seja, 5 > 4

O ">" vai sair como elemento do HTML... então vai dar erro... Eu não posso simplesmente usar o htmlentities() no texto inteiro... pq podem ter códigos q vão se transformar em texto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo, mais porque voce nao cria as suas tags ? ai nao vai ter mais esse problema, e voce so permite o que quiser=]][]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já fiz isso... como h1, h2, hx, b, i, p, blockquote, img, thumb, url, lista, etc...Mas se uma pessoa quiser por exemplo mostrar uma tabela? Fiz mto mais fácil ela pegar o código html da tabela e colar nas tags [*HTML] e [*/HTML]...Ninguém sabe como fazer isso? ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei como um desafio para mim...

 

Então está ae:

 

<?$mensagem = "wefweafwe[html]<b>Isso ficaria não ficaria como negrito, ficaria como texto</b>[/html]";$mensagem = htmlentities($mensagem);$modificado = preg_match_all("/\[HTML\](.*?)\[\/HTML\]/", $mensagem, $match);if ($modificado) {    $cont = 0;    foreach ($match[0] as $valor) {        $html = html_entity_decode($match[1][$cont]);        $arrayMod[$valor] = $html;        $Conteudo = strtr($mensagem, $arrayMod);        $cont++;    }    echo $Conteudo;} else {    echo $mensagem;}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Ehhhhhh!!!! Valeu Justice!!!!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Não sei nem como te agradecer! Tô te devendo essa!!! http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.