Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Sou novo aqui no forum, e gostaria de pedir a ajuda de vocês..
Estou com um problema ao usar preg_replace..
O que acontece é o seguinte:
Vou receber um HTML do banco:
<font color="#ff0000">teste</font>
e preciso trocar o hexadecimal por RGB, e para isso, uso uma função que monta o RGB pra mim:
function hex2rgb($hex) {
$hex = str_replace("#", "", $hex);
if(strlen($hex) == 3) {
$r = hexdec(substr($hex,0,1).substr($hex,0,1));
$g = hexdec(substr($hex,1,1).substr($hex,1,1));
$b = hexdec(substr($hex,2,1).substr($hex,2,1));$r = hexdec(substr($hex,0,2));
$g = hexdec(substr($hex,2,2));
$b = hexdec(substr($hex,4,2));
}
return "rgb(".$r.",".$g.",".$b.")";
}$count = $resultado[0]['descricao'];
$returnValue = preg_replace('/<font color="(.*?)">(.*?)<\/font>/', '<span style="color:$1">$2</span>',$count);
echo $retunValue;
exit;
O problema, é que tenho q passar o valor '$1' do preg_replace pra minha função, para que ela monte o RGB:
$returnValue = preg_replace('/<font color="(.?)">(.?)<\/font>/', '<span style="color:'.hex2rgb('$1').'">$2</span>',$count);
E sempre chega pra função, o valor '$1', e não o hexadecimal que deveria..
O que tenho de fazer para passar o hexadecimal certinho?
Agradeço desde já.
Não dá pra passar assim Marcos Xavier, da erro de sintaxe, tentei passar de outras maneiras tambem, mas só consegui do jeito que está ;/
O problema é que quando você quer usar alguma função nativa ou personalizada com preg_replace() você deveRIA fazer uso de um Modificador PCRE que avalie aquilo que você está substituindo como uma expressão PHP, ao invés de considerar tudo omo uma string, nesse caso, o modificador e (de eval).
Pessoalmente eu acho a sintaxe desse negócio horrorosa principalmente em casos que envolvam HTML onde existem muitas aspas simples e duplas. Vou postar como deveria ser o seu preg_replace() para usar esse modificador justamente porque você NÃO DEVE USÁ-LO.:
preg_replace(
'/<font color="(.*?)">(.*?)<\/font>/e',
'"<span style=\"color:\'" . hex2rgb( "$1" ) . "\'\">$2</span>"', $str
)O primeiro motivo de não se usar é quanto a potencial brecha de segurança que ele pode vir a causar caso você não se precaveja contra ela, assim como toda proteção contra ataque externo.
O segundo motivo contra esse modificador é que ele será depreciado no PHP 5.5 podendo, potencialmente, ser removido no 6, em favor de preg_replace_callback() que faz o mesmo serviço (e mais) de forma limpa.
Entendi Bruno Augusto, por todas essas questões então, vou fazer com o preg_replace_callback(), muito obrigado pelas dicas.
Tenta ae
....
<span style="color:'.hex2rgb($1).'">