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
#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
#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
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)











