Php - Find And Replace
#1
Posted 12/01/2008, 02:39
eu tenho uma pagina que tem uns campos que precisa ser substituido por algumas outras informaçoes
tem certos pontos no codigo html que ira ter um marcador "#"
ex:
<html>
...
<p>#nome#</p>
...
<p>#fone#</p>
...
</html>
preciso que ele procure td que estive entre "#" e substitua
ex:
<html>
...
<p>Harry Potter</p>
...
<p>555-00000</p>
...
</html>
e tbm:
<html>
...
<p>Gandalf</p>
...
<p>555-111111</p>
...
</html>
eu tenho um form, com umas input que eu deverei colocar os nomes e os fone, mandarei para essa pagina onde tem os "#" e ela salvara uma ".html" ja trocada as info
obrigado desde ja
=D
#3
Posted 12/01/2008, 10:59
function replaceTag($tagName, $content, $all) { return str_replace("#".$tagName."#", $content, $all); }
Eu acho bem mais simples do que usar regex...
#4
Posted 12/01/2008, 11:41
Imagina se ele tiver 20 campos... 20 replaces?
É muito mais fácil ele criar um array com os índices iguais aos termos entre "#", e jogar o retrovisor como o índice. E, se mesmo assim não se contentar, ainda é mais prático usar o preg_match_all
*Gostei da sua função de uma função!
Edição feita por: Marcos Aurélio, 12/01/2008, 11:46.
#5
Posted 12/01/2008, 13:55
#6
Posted 12/01/2008, 16:50
#8
Posted 13/01/2008, 02:03
nunca eh tarde para comecar.eu não gosto de regex porque eu nunca me dou bem com expressões regulares...
da uma olhada aqui.
leitura empolgante e exemplos faceis de entender.
vlw
"Living to learn... learning to live!"
Useful links: Rules | Search
#9
Posted 13/01/2008, 02:30
O próprio manual é enfático:
Você até poderia fazer isso:[...] If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().
$nome = 'foo'; $fone = '123'; $depois = preg_replace('{#([^#]+)#}e', '${\1}', $antes);Mas isso aqui é bem mais rápido/indicado:
$depois = str_replace(array('#nome#', '#fone#'), array('foo', '123'), $antes);Num simples teste de performance aqui, com 100 mil iterações, a
preg_replace()
demonstrou-se mais de 7 vezes lenta que str_replace()
. O teste foi repetido várias vezes. []s Até mais
#11
Posted 13/01/2008, 10:21
Mas ali é coisinha básica MA ... é só ele fazer algo assim com str_replace, vendo que ele tem pouca experiência com expressões regulares...
$dados = array('#nome#' => "Joaozinho",'#email#' => "blablabla@blablabla.com",'#outracoisa#' => "lalalala"); $str = str_replace (array_keys($dados), array_values($dados), $str);
#12
Posted 13/01/2008, 12:32
Isto independe dos fins. Nem sempre "otimizar" realmente otimiza algo. Menos código não quer dizer mais performance, longe disso. A propósito, a substituição continuará sendo dinâmica.Isso depende do modo que ele for usar. Usando o str_replace ele terá que ter a lista das tags no PHP, o que eu acho desnecessário, visto que ele pode fazer isso dinâmicamente, ao invés de pegar tag por tag...
As funções baseadas nas biblioteca PCRE e POSIX não são otimizadas para isso. Elas são otimizadas sim, mas para trabalhar com expressões regulares. A função
str_replace()
não é nenhuma vilã no ponto de vista técnico, pelo contrário, ela é suficientemente otimizada para substituições simples. A prova disso tu obtém ao rodar ambos códigos num mesmo números de iterações. Bem lembrado.$str = str_replace (array_keys($dados), array_values($dados), $str);
[]s Até mais
#13
Posted 13/01/2008, 22:30
<?
$imputs = array($_POST['nome'], $_POST['fone']);
$replace = array('#nome#', '#fone#');
$html = '
<html>
<p>#nome#</p>
<p>#fone#</p>
</html>';
echo str_replace($replace,$imputs,$html);
?>
#14
Posted 13/01/2008, 23:42
muito obrigado, tem coisa que eu nao sabia que tinha..
vou pesquizar e vou testar todos
valeu e um abraço
//---------------------------------------------------------------
aproveitando o topico...
to querendo uma script ou função que bloqueie certos IP ao meu site
ex: tds ips que comece com 200.x.x.x, nao vera o site
nao sei se fui claro..
queria uma função pra bloquear certas classes de IP ao meu site,
obrigado
=D
#15
Posted 14/01/2008, 00:44
Enfim...
Antes de tudo, tu terá que usar uma boa técnica para capturar o IP. Eu havia feito algo certa vez, mas o Guilherme Blanco postou uma função aparentemente melhor, mais fácil de achar por sinal: get_ip()
Feito isso, tu tem que definir como será as regras de bloqueio. Questões de sintaxe e tal.
Vou mostrar um exemplo bem simples seguindo tua linha de raciocínio:
<?php $pattern = '127.0.0.x'; // exemplo para testes locais :P $remote_addr = $_SERVER['REMOTE_ADDR']; $regexp = str_replace( array('.', 'x'), array('\.', '(?:(?:1[0-9]|[1-9]?)[0-9]|2(?:[0-4][0-9]|5[0-5]))'), $pattern ); if (preg_match("{{$regexp}}", $remote_addr)) { // bloquear IP } else { // liberar IP } ?>Claro que isso pode ser lapidado. Por exemplo, tu poderia aprimorar o sistema para operar com faixas de IPs, tipo
192.168.0.1-100
. Quanto a isso, deixo pra você... []s Até mais
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)