Jump to content
John Snow

REGEX das variações da IMG TAG em BBCODE

Recommended Posts

Fala pessoal! Sou novato por aqui e estou com um problema que acredito ser simples para programadores mais experientes.

Eu preciso converter a IMG TAG de BBCODE para HTML e para tal farei uso de REGEX em PHP. O problema é que existem 6 variações da IMG TAG, são elas:

[img]img_patch[/img]
[img=200x150]img_patch[/img]
[img width=200 height=150]img_patch[/img]
[img=width=200xheight=150]img_patch[/img]
[img width=200]img_patch[/img]

Estou testando aqui e consegui efetuar o REGEX para as 2 primeiras variações:

'#\[img=(.+)\]#Usi',
'#\[img=?(\d+)?x?(\d+)?\](.*?)\[/img\]#Usi',

Preciso de ajuda para as outras variações ou mesmo para um REGEX único que englobe todas as variações.

Agradeço muito sua ajuda!!!

Share this post


Link to post
Share on other sites

@John Snow abre um arquivo qualquer aí no seu servidor e vê se é mais ou menos isso que você ta procurando:

$string = "[img width=200 height=150]img_patch[/img]";

preg_match_all('/\[img(.*)\].+\[\/img\]/Usi',$string,$match);

echo "<pre>";
print_r($match);
echo "</pre>";

Eu não entendi muito bem o que você quer fazer, qualquer coisa você tenta me explicar de novo, aí a gente faz um novo regex.

Share this post


Link to post
Share on other sites

Bom, após muitos testes eu consegui fazer REGEX para cada cenário e funcionou perfeitamente.

 

Caso não tenha ficado claro, esse REGEX será usado em uma função que irá pegar uma variável (campo texto salvo no formato BBCODE dentro de um BD através de um formulário com WYSIWYG EDITOR) e o mostrará como HTML. Usar o BBCODE neste caso previne XSS attacks pois não preciso usar o Header('X-XSS-Protection: 0'); no PHP em caso de mandar o conteúdo em XHTML (que ocasiona o erro ERR_BLOCKED_BY_XSS_AUDITOR no Google Chrome) ou transformar o conteúdo do campo através de JS em base 64 encode para depois decodificar no PHP.

  

Caso você venha a precisar disso, segue abaixo a minha solução. Melhorias são sempre bem vindas:

 

'#\[img=(.+)\]#Usi',
'#\[img=+(\d+)x+(\d+)\](.+)\[/img\]#Usi',
'#\[img[\s|=]+[width=]+([0-9]+)?[\s|x]+[height=]+([0-9]+)\](.+)\[/img\]#Usi',
'#\[img[\s]+[width=]+([0-9]+)\](.+)\[/img\]#Usi',

 

Esse REGEX cobre os seguintes formatos de IMG TAG

 

[img]img_patch[/img]
[img=300x200]img_patch[/img]
[img width=200 height=150]img_patch[/img] e [img=width=130xheight=50]img_patch[/img]
[img width=200]img_patch[/img]

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By danilo759
      Tenho uma tabelinha de programas para uma rádio... está da seguinte forma.

      titulo
      data (YYYY-MM-DD)
      hora (00:00:00)

      Minha consulta, mas não retorna o programa da hora corrente. O que eu fiz de errado?
      SELECT * FROM programas WHERE data = CURDATE() AND hora = CURTIME() LIMIT 1
    • By Ro_JnR
      Estou tentando a semanas resolver um problema, consumir uma API e verificar se o campo no banco está vazio, se estiver faz insert se não faz update.
      Até aí tudo bem, agora não consigo passar do meu select para o banco, ele da erro.
       
      Segue o código:
       
      <?php

          require_once("db.class.php");
          
          $url = "https://servicodados.ibge.gov.br/api/v1/localidades/distritos";
              $ch = curl_init($url);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              $resultado = json_decode(curl_exec($ch));
              foreach ($resultado as $cidades) {
                  $nome = $cidades->nome;
                  $stmt = $conn->prepare("SELECT name FROM cidades WHERE name=?");
                  $stmt->bind_Param(':name', $nome);
                  $stmt->execute();
                  $stmt->bind_result($resultSelect);
                  $stmt->fetch();
                  if(!$stmt->execute()){
                      print_r($stmt->errorInfo());
                  }
              } 

      ?>
       
      Código do banco:
       
      $conn = new PDO("mysql:host=localhost;dbname=exercicio", "root", "");
      //"sqlsrv:Database=dbphp7;server=localhost\SQLEXPRESS;ConnectionPooling=0", "sa", "root");
      $stmt = $conn->prepare("SELECT * FROM cidades ORDER BY nome");
      $stmt->execute();
      //fetchALL basicamente faço while do mysqli
      $results = $stmt->fetchALL(PDO::FETCH_ASSOC);
       
      Print do erro:

       
      Tenho um outro exercicio que fiz bem parecido, consumi a API de estados e inseri no banco de dados, esse funcionou normalmente.
      Alguém poderia me dar uma luz, não sei mais o que fazer.
      Era para ser simples rsrsrrs.
    • By asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • By asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • By dutopfave
      Boa Noite Galera, estou com dúvida em como cria um cadastra de VARIAÇÕES DE PRODUTOS.

      Ex.: Tenho um produto que é um TENIS, ai nele vou criar as VARIAÇÕES, então vou usa COR e TAMANHO.
      COR: preto, verde, azul
      TAMANHO: 39, 40, 41

      até ai blz, porém a duvida é como fazer o cadastrado de combinações de cor e tênis, tipo no banco de dados teria q fica exatamente assim....

      ID | COR | TAMANHO
      ... | preto | 39
      ... | preto | 40
      ... | preto | 41
      ... | verde | 39
      ... | verde | 40
      ... | verde | 41
      ... | azul | 39
      ... | azul | 40
      ... | azul | 41

      alguém tem alguma solução
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.