Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

06-06-2009 21:17

Olá amigos, estou a uns quatro dias tentando fazer uma expressao regular que não deixa codigos html apenas aberto
<h1>TITULO
<p>conteudo</p>

No caso eu queria que o h1 sumisse.

Strip_tags() não serve para o que eu quero, pois se a tag permitida estiver aberta vai deformar meu codigo.
consegui montar algumas expressoes do tipo:

/(<h1>)(?![^> ]*>?.*(<=^|>)(.*?)<\/h1>)/ixsm

mas não está dando certo, tipo, se eu tiver essa estrutura

<h1>dsvds<h1></h1>

<h1><h1><h1><h1>
</h1></h1></h1></h1>


dar erro, mas se eu usar uma mais simples
<h1>dsvds<h1></h1>

<h1><h1><h1><h1>


dar certo. Pelo que vi o problema é quando se abre uma tag depois de várias abertas.
Preciso muito de uma solução e agradeço muito quem me ajudar =D.

Obrigado desde já.

Att, Bruno Luiz

Obs: Para solução não precisa ser como minha ideia, so nao quero permiti que pagina seja distocida por tags permitidas.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

06-06-2009 21:51

Como é a sua estrutura? Essas tags são postadas em uma caixa de texto?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

06-06-2009 22:21

Sim, sao textareas onde o usuario tem a liberdade de colocar algumas tags html.
Portanto, eu nao quero tags que nao fecham.
<p> minha frase
o certo seria
<p> minha frase</p>
so que se tiver desta forma,
<p> minha frase <p> outra frase </p>
um dos dois "p" teriam que ser excluidos pois nao estao fechando. Pela regra html seria o primerio, mas do jeito que eu fiz esta saindo o segundo "p" ( mas isso é o de menos) e tambem queria proibir o uso de varias tags abertas sem fechamento e/ou conteudo tipo:
<p><p><p>
ou
<p>
<p>
<p>
a minha ideia é essa, mas aceito qualquer sugestao que impessa que o nao fechamento das tags destorçam o site e deixem o html sujo.

Desde ja agradeço.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

06-06-2009 22:58

Tem uma função no link abaixo que parece ser o que precisa

http://snipplr.com/view.php?codeview&id=3618

Uma outra função que achei também

<?php function close_dangling_tags($html){ #put all opened tags into an array preg_match_all("#<([a-z]+)( .*)?(?!/)>#iU",$html,$result); $openedtags=$result[1]; #put all closed tags into an array preg_match_all("#</([a-z]+)>#iU",$html,$result); $closedtags=$result[1]; $len_opened = count($openedtags); # all tags are closed if(count($closedtags) == $len_opened){ return $html; } $openedtags = array_reverse($openedtags); # close tags for($i=0;$i < $len_opened;$i++) { if (!in_array($openedtags[$i],$closedtags)){ $html .= '</'.$openedtags[$i].'>'; } else { unset($closedtags[array_search($openedtags[$i],$closedtags)]); } } return $html; } echo close_dangling_tags("<div>abc<b>texto</div>"); ?>

Ref.: http://codesnippets.joyent.com/posts/show/959
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 00:33

Amigo valeuuuuuu
não 100% o que queria mas vai ajudar muito

pq a primeira funcao adiciona o fechamento no final de tudo

<b>BRUNO
<p>LUIZ</p>
fica assim
<b>BRUNO
<p>LUIZ</p></b>
eu queria
<b>BRUNO</b>
<p>LUIZ</p>
ou
BRUNO
<p>LUIZ</p>

mas ai já é pedi demais :-) e algo me diz que o que to querendo nao tem sentido (sono)
as duas funcoes vão servir e muito estão perfeitas sem duvidas. Valeuu mesmo
\o/
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 01:00

:-)
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 08:33

Valeuuu, só mais uma dúvida
se eu tiver essa sequencia:

<p>
<p>
<p>
ou
<p></p>
<p></p>
<p></p>

Tem alguma forma de excluir tags abertas e fechadas conteudo e tags que se repetem mais de duas vzs seguidas ?

valeuuuu
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 08:47

Por número de vezes eu não sei, somente que é possível eliminar as tags, ou tags e conteúdo.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 10:01

Eu montei essa Expressao: (<[^<]+?>|<[^<]+?>)(<\/[^<]+?>|<[^<]+?>) e deu quase certo só nao to conseguindo quebrar linha e

<p><p><p>

<p><p>
<p><p><p><p><p><p><p><p>
<p><p>
<p><p>
<p><p>
<p><p>
<p><p>
</p>
<p></p>

<p>dsvsvsvs<p>
<p>fdvfdvfdvf

<p>gfdgfdgdfgd</p>
<h1><h1>
<h2><h2>
<h2></h2>
<h1>gbgbf
<h1>fddb</h1><h1><h1></h1> </h1></h1></h1></h1>
<h3>
</h3>dsvds<h3></h3></h3>
mas tah errado ainda =/ nao funciona com quebra e se tiver muitos ele pega oq nao deveeeeeeeria
eu to testando no site
http://www.rubular.com/

o que to fazendo é uma filtragem onde apago tudo que não tem conteudo ou temn tags em excesso.
( esse negocio tah me confundido uhauh)

bom éisso acho que consegui explicar. qualquer duvida tento refinar mais minha pergunta
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 16:05

Então precisa tirar as linhas em branco?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 17:35

o primeiro código não funcionou com <h1> ele não reconhece, com outros eles fecharam normalmente, mas o problema que ele fecha no fim de tudo, o idéia seria deletar oq se a pessoa abriu mas não fechou é melhor deixar sem formatação do que estragar resto da pagina, já que uma <h1> no inicio de uma frase deixa todo o resto em caixa maior.

E tem o problema dos
<p>
<p>
<p>
<p>,p><p>

Não posso permitir monte de <p> em seguida sem conteúdo.

O segundo código é muito bom pois posso criar título de noticias com ele. Sei que tem como fazer o que quero mas só não imagino como =/

Muito obrigado desde já.

ADICIONADO

troquei a ordem das funções :smile
a primeira adiciona tag de fechamento as nao abertas e a segunda corta uma string como se fosse uma headline
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 17:46

Então finalizou o script? Se sim, posta como ficou
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 18:06

Não amigo, não consegui ainda infelizmente só quis dizer que as funcoes acima me ajudaram mas nao resolveram meu problema, achei algo em perl mas nem entendo direito mas parece ser +- o que quero
Interessante sobre este problema .. Como uma abaixo, que estabelece a primeira palavra depois de um órfão <uma etiqueta como o link.

Para scripts use o Code

#! E: \ perl \ bin \ perl.exe print "Content-Type: text / html \ n \ n";   # Um teste post $ string = qq ~ <a href="testpage1.html"> eu não fechar essa tag <b> <br> Este é algum texto em negrito e interessante entre </ b> para fazer esse teste aparência REAL. Não deveria fazer parte da ligação ao utilizador final pretendia anteriormente. <a <b> href="testpage2.html"> e eu adicionar negrito sobreposição b / href estreita ligação que eu faço </ b> </ a> <br> Esta é mais interessante no texto entre <a <i> href="testpage3.html"> Este link </ i> está no final e não está fechada, tem sobreposição itálico <br> Esta linha não devem tornar-se parte do link <a href="testpage1.html"> QQ ~;   $ string = ~ s / (\ n | \ t | \ r) / / g; @ cordas = split (/ <a /, $ string);   foreach $ between_ahref (@ texto) (   # Temos um fecho a href tag aqui? Se não adicioná-lo, apenas a primeira palavra link IF ($ between_ahref! ~ / <\ / a> / gis & & $ between_ahref = ~ / ^ \ s * \ b (.*?) \ b /) ( firstword $ = $ 1; $ string = ~ s / $ firstword / $ firstword <\ / a> / é; )   elsif ($ between_ahref! ~ / <\ / a> / SIG) (# essa é a última palavra no pós tha desperdiça uma tag de fechamento $ string = ~ s / $ between_ahref / $ between_ahref <\ / a> /; )   )   print "$ string";

Achei aqui: http://translate.google.com.br/translat ... 5%26sa%3DG
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 18:13

Blz, se achar algo mais voltado para o problema posto aqui.

Ah, uma coisa interessante é usar esses editores de texto, como TinyMCE, porque ele já envia o texto configurado, sem abertura e fechamento desnecessários.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 18:26

Desculpa pelo erros na postagem hehe
sim sim eu to usando esse editor so nao quero nenhumengraçadinho desabilitando o javascript.

achei esse site mas nao tem muita coisa diferente nao =/
http://milianw.de/code-snippets/close-html-tags
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 18:37

Tem uma função que postaram nesse link que parece que fecha a tag certinho. Veja o teste que fiz aqui

<?php function closetags($html) { $arr_single_tags = array('meta','img','br','link','area'); preg_match_all('#<([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result); $openedtags = $result[1]; preg_match_all('#</([a-z]+)>#iU', $html, $result); $closedtags = $result[1]; $len_opened = count($openedtags); if (count($closedtags) == $len_opened) { return $html; } $openedtags = array_reverse($openedtags); for ($i=0; $i < $len_opened; $i++) { if (!in_array($openedtags[$i],$arr_single_tags)) { if (!in_array($openedtags[$i], $closedtags)) { if ($next_tag = $openedtags[$i+1]) { $html = preg_replace('#</'.$next_tag.'#iU','</'.$openedtags[$i].'></'.$next_tag,$html); } else { $html .= '</'.$openedtags[$i].'>'; } } } } return $html; } echo closetags("<p><b>texto</p>") ?>

1
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 18:50

sim sim eu vi, problema é a tag h1 ela que faz mais estragos se for permitida mas se for usada indevidamente. a tag h1 nao funciona ( nao sei pq )
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 19:05

Pelo que observei tem relação com a quantidade de caracteres na tag, 2, com 1 caracter parece não dar problema.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 19:20

eu testei:
echo closetags("<strong>TESTE") -> DEU CERTO
echo closetags("<u>LUIZ <strong>TESTE") -> DEU CERTO SO PRO 'u'

uma outra solução seria usar bbcode mas nao achei nenhum que mostre o resultado na tela, pra quem não tem experiencia se confude
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 19:23

Não testei o strong, então, o melhor seria os editores de texto para site, porque simulam o Word, onde o texto já sai configurado na tela, nele é quase 100% das tags ficarem corretas, porque o usuário vai selecionar a palavra para ativar a tag.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 19:29

e se o engraçadinho do usuario desativar javascript ?
ou der monte de parágrafo? Uma de minhas preocupações são essas.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 19:39

É, ai complica mesmo. Já que o usuário postando não é confiável, melhor seria deixar um molde onde entraria só o texto, ou, ter um editor que verificaria o conteúdo, ou, usar editor e esse script para tentar filtrar tags abertas, tem essas possibilidades, só ver o que é mais conveniente.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 20:01

A solução que eu tenho resolve para usuario leigos, agora meu medo é aqueles espertinho que sabem algumas tags e adora enfeitar texto, vo pesquisar mais um pouco se nao consegui jogo a toalha
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Expressao Regular

07-06-2009 20:05

Blz, alternativas tem, só que se não são válidas ai complica mesmo :?
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 10 postagens
Mais de 10 postagens
Tópico Autor
Mensagens: 14
Sexo: Masculino

Expressao Regular

07-06-2009 20:07

Achei esse codigo abaixo mas está em outra linguagem, segue a tradução:

Achei esse Este regex foi escrito há muito tempo atrás, quando HTML:: Parser trabalho sobre Perl puro (agora HTML:: Parser reescrito em C para melhorar o desempenho). Nosso regex foi muitas vezes mais rápidas e mais precisas do que HTML:: Parser.
Agora eu comparar novamente este regex e HTML:: Parser 3/25 (novo, versão C). E a minha regex ganhar novamente, mas não "muitas vezes mais rápido", apenas "alguns por cento mais rápido". ;-) Eu não posso testar quem deles é "mais precisa" no momento.

sub untag {   LOCAL $_ = $_[0] || $_; # ALGORITHM: #   find < , #       comment <!-- ... -->, #       OR comment <? ... ?> , #       OR one OF the START tags which require correspond #           END tag plus ALL TO END tag #       OR IF \s OR =" #           then skip to next " #           ELSE [^>] #   >   s{     <               # OPEN tag     (?:             # OPEN GROUP (A)       (!--) |       #   comment (1) or       (\?) |        #   another comment (2) OR       (?i:          #   OPEN GROUP (B) FOR /i         ( TITLE  |  #     one OF START tags           SCRIPT |  #     FOR which           APPLET |  #     must be skipped           OBJECT |  #     ALL content           STYLE     #     TO correspond         )           #     END tag (3)       ) |           #   close GROUP (B), OR       ([!/A-Za-z])  #   one OF these chars, remember IN (4)     )               # close GROUP (A)     (?(4)           # IF previous CASE IS (4)       (?:           #   OPEN GROUP (C)         (?!         #     AND NEXT IS NOT : (D)           [\s=]     #       \s OR "="           ["`']     #       with open quotes         )           #     close (D)         [^>] |      #     and not close tag or         [\s=]       #     \s or "=" with         `[^`]*` |   #     something in quotes ` or         [\s=]       #     \s or "=" with         '[^']*' |   #     something in quotes ' or         [\s=]       #     \s or "=" with         "[^"]*"     #     something IN quotes "       )*            #   repeat (C) 0 or more times     |               # else (if previous case is not (4))       .*?           #   minimum of any chars     )               # end if previous char is (4)     (?(1)           # if comment (1)       (?<=--)       #   wait for "--"     )               # END IF comment (1)     (?(2)           # IF another comment (2)       (?<=\?)       #   wait FOR "?"     )               # END IF another comment (2)     (?(3)           # IF one OF tags-containers (3)       </            #   wait FOR END       (?i:\3)       #   OF this tag       (?:\s[^>]*)?  #   skip junk TO ">"     )               # END IF (3)     >               # tag closed    }{}gsx;          # STRIP THIS TAG   RETURN $_ ? $_ : ""; }

0

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado