• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

The Boss

bbcode to xhtml

9 mensagens neste tópico

Boa noite, eu estou e criar um fórum por mim próprio para aprofundar os conhecimentos básicos de php que tenho

e agora estou a criar o ficheiro para criar posts/tópicos

já fiz várias validações ao input do utilizador:

*passar todo o unicode e símbolos a htmlentities

*tirar /n /t /r e por <br />

*e transformar as bbtags em html MAS

eu não gosto nada de ver um site com código html deste tipo:

<B><U>asdf</B></U>

o que quero fazer é que ordene as bbtags de maneira a respeitar o xhtml para aparecer assim:

<B><U>asdf</U></B>

então, pensei em resolver este problema assim:

1-separar as bbtags to post

2-e deixar o post num arry  e as bbtags noutro array

3-inventava um truque para ordenar array das bbtags para ficar xhtml correcto

  3.1- se possível fazer um log com as alterações

4-e depois substituía o bbcode por xhtml

5-e juntava a array do post mais a do xhtml

até agora só fiz o ponto um, e fiz metade do ponto dois, e só de pensar no ponto 3, fico todo atrofiado  :shocking: :eek:

e depois fico a pensar, se eu for usar isto num fórum muito activo, (ex.: com 500 utilizadores simultâneos), este código deve comer cpu que sa farta

queria que alguém me desse dicas de como acabar o ponto 2 e 3, e sugestões/ideias para uma maneira de ordenar as bbtags para xhtml

aqui vai o que fiz até agora, sobre este assunto

<?php
//por as bbtags so com o inicio e o fim de cada tag, tirar o ']'
//


$post="  Você é [b]de que país? hh [/b]gfhfg [b]hh[/b]";

$postsize = strlen($post);


$bbtag = array (
1 => array(1=> "[color="  ,2=> "]"),
2 => array(1=> "[b"       ,2=> "]"),
3 => array(1=> "[/color" ,2=> "]"),
4 => array(1=> "[/b"      ,2=> "]")
); 
//organizar este array, nao precisa do "]"
$tot=0;

//dividir tags e texto
for ($h=1; $h <= 4;$h++)
  {
  for ($i=0;$i<=$postsize;$i++)//ver se tem varias vezes a mesma tag
    {
    if (is_int(stripos($post,$bbtag[$h][1],$i)))
      {
      $result[$tot][1] = stripos($post,$bbtag[$h][1],$i);
      $result[$tot][2] = stripos($post,']',$result[$tot][1]);
      $i=$result[$tot][2];
      $tot++;
      }
    }
  }
sort($result);
$num_tags=count($result);

for ($h=0; $h <= ($num_tags-1);$h++)
{
$tags[$h] = substr($post,$result[$h][1],$result[$h][2]-$result[$h][1]+1);
}

echo "<pre>";
echo var_dump($result);
echo "</pre>";

echo "<pre>";
echo var_dump($tags);
echo "</pre>";


?>

esperimentem este código

desculpem se tenho má pratica de programação, só aprendi php a partir do phpmanual e do w3school e do que aprendi na escola

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se não souberem/conseguírem ajudar, podiam indicar algum sitio aonde me poderiam ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
eu não gosto nada de ver um site com código html deste tipo:

<B><U>asdf<U><B>

o que quero fazer é que ordene as bbtags de maneira a respeitar o xhtml para aparecer assim:

<B><U>asdf<B><U>

O teu exemplo que supostamente respeita as regras, não as respeita. Isto sem contar que estás só a abrir tags e nunca as fechas.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
eu não gosto nada de ver um site com código html deste tipo:

<B><U>asdf<U><B>

o que quero fazer é que ordene as bbtags de maneira a respeitar o xhtml para aparecer assim:

<B><U>asdf<B><U>

O teu exemplo que supostamente respeita as regras, não as respeita. Isto sem contar que estás só a abrir tags e nunca as fechas.

oi, desculpa ai,

esqueci me do '/'do lado direito

mas o objectivo é por as tags como deve ser

vou editar o post inicial, para que mais ninguém se confunda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
eu não gosto nada de ver um site com código html deste tipo:

<B><U>asdf<U><B>

o que quero fazer é que ordene as bbtags de maneira a respeitar o xhtml para aparecer assim:

<B><U>asdf<B><U>

O teu exemplo que supostamente respeita as regras, não as respeita. Isto sem contar que estás só a abrir tags e nunca as fechas.

oi, desculpa ai,

esqueci me do '/'do lado direito

mas o objectivo é por as tags como deve ser

vou editar o post inicial, para que mais ninguém se confunda

Continua errado. Estás a fechar o <b> sem fechares o <u> que abriste lá dentro.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu não gosto nada de ver um site com código html deste tipo:

<B><U>asdf</B></U>

o que quero fazer é que ordene as bbtags de maneira a respeitar o xhtml para aparecer assim:

<B><U>asdf</U></B>

eu editei o post inicial, e o objectivo do script é isso mesmo, caso o utilizador fecha o <B> antes do <U>, o script tem que corrigir isso

é o que quero que o script faça

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, agora já percebi!

O que eu faria era percorrer a "árvore" e ir adicionando a um array as tags que estão abertas. Quando encontrasse um fecho de uma tag, apagava a entrada na array. Se não tivesse presente naquele "ramo", ia procurar no seu "ramo-mãe" e por aí fora até encontrar a tag. Quando acabasse de percorrer o conteúdo da tag, fechava as tags que tinha referenciado no array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, agora já percebi!

O que eu faria era percorrer a "árvore" e ir adicionando a um array as tags que estão abertas. Quando encontrasse um fecho de uma tag, apagava a entrada na array. Se não tivesse presente naquele "ramo", ia procurar no seu "ramo-mãe" e por aí fora até encontrar a tag. Quando acabasse de percorrer o conteúdo da tag, fechava as tags que tinha referenciado no array.

entendi a tua ideia e vou fazer amanha um diagrama disso e postar aqui

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

peço desculpa por não ter postado o diagrama ainda, mas como agora ando em estagio, fiquei quase sem tempo livre

Já tenho um pedaço de código que resolve este problema, mas ainda tem bugs.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora