Ir para o conteúdo
The Boss

bbcode to xhtml

Mensagens Recomendadas

The Boss    0
The Boss

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
The Boss    0
The Boss
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
The Boss    0
The Boss

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
The Boss    0
The Boss

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
The Boss    0
The Boss

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade