Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
fala pessoal,
estou precisando acrescentar estilos in-line em tags html em textos, vou dar um exemplo para ser mais especifico:
tenho uma variavel da seguinte forma:
$texto = "<p>Lorem ipsum<p>";
e tenho a seguinte array:
$css = array( "p" => "font-size:14px; color:#999;", "h1" => "font-size: 26px;" );
agora de alguma forma precisaria correr a variavel $texto em busca de tags html como o <p> e com a array $css alterar sua forma para a seguinte:
"<p style=\"font-size:14px; color:#999;\">Lorem ipsum<p>";
existe alguma expressao regular que faça isso? ou há outra forma para resolver isso?
[]'s http://forum.imasters.com.br/public/style_emoticons/default/grin.gif
>
Faça assim:
echo "<p style=\"" . $css['p'] . "\">Texto</p>";
É isso que você quer?
[]s
Beraldo
quase isso, mas queria algo mais automatizado, tipo fiz aqui e ficou bem parecido com que to querendo olha só:
$tag = array
(
"/<p>/",
"/<h1>/"
); "<p style=\"font-size:20px;\">",
"<h1 style=\"color:#003366;\">"
);
$html = "<p>Lorem ipsum</p>\n";
$html = preg_replace($tag, $para, $html);
seria quase isso porem, gostaria de alguma forma nao precisar colocar na assim **"<p style=\"font-size:20px;\">"** mas apenas mostrar o estilo, dessa forma **"font-size:20px;"**
não sei se ficou claro! mas é isso...
galera, enquanto nao consigo nada melhor, fiz uma classe para me ajudar por enquanto, se tiverem algum conselho para melhorar estamos ai!
/*
===================================
Classe para colocar estilos inline
***********************************
* @example:
* $html = "<p><b>Alô</b> Mundo!</p>";
* $objCss = new cssInLine();
* $html = $objCss->change($html);
* echo $html; var $html;
var $tag;
var $para;
public function __construct ()
{
$this->tag = array(
"/<p>/",
"/<h1>/",
"/<body>/",
"/<b>/"
);
$this->para = array(
$this->inline("p", "font-size:20px; font-family: Trebuchet MS, Georgia;"),
$this->inline("h1", "color:#003366; font-variant:small-caps; text-align: center; padding:10px; background: #f7f7f7;"),
$this->inline("body", "font-family: Arial, Tahoma;"),
$this->inline("b", "color: #cc0000;")
);
}
public function inline ($seletor, $estilo) {
return "<$seletor style=\"{$estilo}\">";
}
public function change ($html){
return preg_replace($this->tag, $this->para, $html);
}
}Estou sem o PHP instalado aqui para testar, mas tente assim:
$css = array( "p" => "font-size:14px; color:#999;", "h1" => "font-size: 26px;" );
echo preg_replace("/<([a-z0-9])+?>/i", "{$css['$1'}", $texto);
Não sei se aquele $1 no índice do array vai funcionar para casar com a ER. Nunca fiz isso. Assim que eu puder, farei um teste. Veja se funciona. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
[]s
Beraldo
Beraldo, quase q da certo!
porem eu alterei e ficou assim:
$css = array( "p" => "font-size:14px; color:#999;", "h1" => "font-size: 26px;" );
$texto = "<p><b>Olá</b> mundo!</p>\n";
echo preg_replace("/<([a-z0-9])+?>/i", "$css{'$1'}", $texto);
e me retornou esse resultado:
Array{'p'}Array{'b'}Olá mundo!
como não tenho experiencia com ER, o que devo alterar para fazer a troca certa?
Não consegui uma forma mais compacta, mas esta funcionou perfeitamente:
$css = array( "p" => "font-size:34px; color:#999;", "h1" => "font-size: 46px;" );
$texto = "<h1>Ola</h1>\n<p>mundo!</p>\n<b>negrito</b>";
preg_match_all("/<([a-z0-9]+?)>/i", $texto, $matches);
foreach ($matches[1] as $tag)
{
if (array_key_exists($tag, $css))
{
$texto = preg_replace("/<" . $tag . ">/i", "<" . $tag . " style=\"" . $css[$tag] . "\">", $texto);
}
}
echo $texto;
[]s
Beraldo
obrigado Beraldo, funcionou perfeitamente!!!
http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
Faça assim:
É isso que você quer?[]s
Beraldo