Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

guhfloripa

[Resolvido] formatação html para envio de e-mail

Recommended Posts

olhe so este bug no php, executado via localhost.

 

<?php

$bbb = $_POST['sss'];

echo "<a href'=".$bbb."'>site</a>"."<br>";

$aaa = "<a href='http://www.imasters.com.br'>site</a>";

echo $aaa."<br>";

?>

a variavel $bbb vai ser passada por um formulario com o valor "http://www.imasters.com.br".

 

o retorno disto era pra aparecer na tela:

 

site

site

 

sendo que ao clicar nos 2 links era para ir para o mesmo site o que não ocorre, a variavel $aaa vai para o site de forma correta, ja a $bbb

vai para o site com endereço errado com localhost.

 

se alguem souber mais sobre isto bota ai hehe como corrigir este bug.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está usando as aspas de forma errada, e o teu HTML está incorreto.

<?php
if( isset($_POST['enviar']) )
{
	$bbb = $_POST['sss'];
	echo '<a href="'.$bbb.'">site</a>'.'<br />';

	$aaa = '<a href="http://www.imasters.com.br">site</a>';'>http://www.imasters.com.br">site</a>';
	echo $aaa.'<br />';
}
?>
<form action="" method="post">
	<input type="text" name="sss" value="http://www.imasters.com.br" />
	<input type="submit" name="enviar" value="Enviar" />
</form>
Note que aqui:

a href'=
você abriu o delimitador do valor do atributo href da tag a, ANTES do sinal de atribuição =

Por isso que o HTML gerado estava incorreto, e não estava te produzindo o link.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está usando as aspas de forma errada, e o teu HTML está incorreto.

<?php
if( isset($_POST['enviar']) )
{
	$bbb = $_POST['sss'];
	echo '<a href="'.$bbb.'">site</a>'.'<br />';

	$aaa = '<a href="http://www.imasters.com.br">site</a>';'>http://www.imasters.com.br">site</a>';
	echo $aaa.'<br />';
}
?>
<form action="" method="post">
	<input type="text" name="sss" value="http://www.imasters.com.br" />
	<input type="submit" name="enviar" value="Enviar" />
</form>
Note que aqui:

a href'=
você abriu o delimitador do valor do atributo href da tag a, ANTES do sinal de atribuição =

Por isso que o HTML gerado estava incorreto, e não estava te produzindo o link.

 

 

n abri nao amigo.. voce que viu errado.

 

echo '<a href="' < esta aberto de forma correta, para entao vim o valor da variavel $bbb(http://www.imasters.com.br).'

 

OBs: echo '<a href="'.$bbb.'">site</a>'.'<br />'

 

ele contruiu uma taq html que era pra ser mostrada assim (<a href="http://www.imasters.com.br">site</a>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Presta atenção no HTML que o teu script gera:

<a href'=http://www.imasters.com.br'>site</a><br>
<a href='http://www.imasters.com.br'>site</a><br>
http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

o problema é essa linha aqui:

echo "<a href'=".$bbb."'>site</a>"."<br>";
Roda o código que postei, que você irá notar a diferença.. sei como é... as vezes agente está de cabeça quente com um problema, e não encherga esses erros pequenos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui ver o erro hehe..

so que o bug persiste se caso eu troque ali por:

<?php

$bbb = $_POST['sss'];

//echo "<a href=".$bbb.">site</a>"."<br>";

$bbb=str_replace('"',"'",$bbb);

echo $bbb."<br>";

$aaa = "<a href='http://www.imasters.com.br'>site</a>";

echo $aaa."<br>";


?> 

e eu passe a variavel $bbb com o valor <a href="http://www.imasters.com.br">site</a>

para as duas variaveis ir para o mesmo endereço porem isto nao ocorre hehe.

 

obs: a função replace troca o " por ' para que seja interpretado no php e seja mostrado como um echo.

 

aonde esta o erro agora? kk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz... você continua usando as aspas de forma errada..

e não é necessário o uso do str_replace ai...

 

Veja... no php, o conteudo que estiver dentro de aspas duplas ( " ), será interpretado.

Oque estiver dentro de aspas simples não.

 

E o HTML correto é este:

<a href="http://www.imasters.com.br">site</a>
você DEVE usar aspas duplas para delimitar valores de atributos de tags HTML.

E no caso de você passar a tag HTML completa no input, tem que ver se teu servidor está com magic_quotes ativado

pois ai a saida será:

<a href=\'http://www.imasters.com.br\'>site</a>
e o link não vai funcionar como você quer..

 

O meu exemplo tá perfeito.. não entendo qual é a tua dúvida ainda..

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado pela ajuda Wilian Bruno, comecei a entender o que voce esta querendo dizer hehe

muito obrigado.

 

Porem a situação que me cerca é a seguinte, um usuario ira digitar em um campo input e eu irei pegar isto na variavel $bbb

 

usando o metodo $_POST, e depois gostaria demostrar na tela o que ele digitou no formulario.

 

Sendo que o que o usuario vai digitar no formulario vai ser um codigo html do tipo "<html><a href="http://www.imasters.com.br">site</a></html>"

 

então ao dar um echo nessa variavel.. tenho que mostrar ela de forma correta tem como fazer isto?

 

ate porque se ficar assim :

$bbb = "<html><a href="http://www.imasters.com.br">site</a></html>";

echo $bbb;

 

ira dar erro por causa dos " aspas a mais por isso que usei replace.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você quer mostrar o resultado do HTML que o usuário digitou ?

ou quer mostrar o código ?

 

vê algo sobre addslashes

http://br.php.net/addslashes

 

E se você quiser mostrar o código, vai ter que converter os entities..

http://br.php.net/manual/en/function.htmlentities.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade meu código seria para enviar emails, teria um formulario e o usuario,

iria colocar seu nome, o email do destinatario, e a mensagem que ele quer que envie

para esta pessoa.

 

Código ficaria assim:

 

<?php
$nome = $_POST['nome'];
$mensagem = $_POST['mensagem'];
$destinatario = $_POST['destinatario'];


?> 


na verdade meu codigo php seria um formulario assim


<form action="" method="post">
        <input type="text" name="nome" value="" />
        <input type="text" name="mensagem" value="" />
	<input type="text" name="destinatario" value="" />
        <input type="submit" name="enviar" value="Enviar" />
        
</form>

Porem esta mensagem dele sera em formato html, entao seria tipo uma pagina completa de html:

exemplo:

 

<body>
  
   
    <b>
     <font color=#0033FF>- Melhor site de PHP é o imasters</font>
    </b><br/>
     <a href="http://www.imasters.com.br>Site Imasters</a>

<body>

se for ver $mensagem = (este codigo ali de cima) iria dar erro.. por causa das "(aspas).

queria que enviasse para o email exatamente como o usuario colocou.

OBS: utiliza a classe phpmailer. obrigado amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

siga as instruções do William

 

e apenas comentando um trecho que ficou estranho

 

echo '<a href="'.$bbb.'">site</a>'.'<br />';

no trecho final site</a>'.'<br />' em vermelho, por quê criou um ponto de concatenação no meio da string ?

não precisa..

 

correção:

echo '<a href="'.$bbb.'">site</a><br />';

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php

$link = $_POST['meu_link'];
$link = addslashes($link);
//$link = htmlspecialchars($link);

echo $link . '<br />';

$url = '<a href="'. $link  .'">Meu Link</a>';

echo $url . '<br />';

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

$link = $_POST['meu_link'];
$link = addslashes($link);
//$link = htmlspecialchars($link);

echo $link . '<br />';

$url = '<a href="'. $link  .'">Meu Link</a>';

echo $url . '<br />';

?>

 

cara mais o cara vai mandar nao apenas um link, sera um codigo html e eu quero mandar este codigo por email, ou mostrar na tela.

 

ficaria assim:

 

$link = "<body>

<b>

<font color=#0033FF>- Melhor site de PHP é o imasters</font>

</b><br/>

<a href="http://www.imasters.com.br>Site Imasters</a>

 

<body>";

 

$mail->Body = $link;

só que obviamente isto nao daria certo(devido as aspas"), alguem tem alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure sobre o TidyHTML... Ele vai te ajudar a "limpar" o seu HTML. ;)

 

Ou procure sobre o TinyMCE... Ele vai te ajudar a garantir que o usuário está criando um HTML "limpo" e que não causará erros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado himon pelo detalhe, porem isto é um simples detalhe nao resolve o problema, obrigado.

foi uma mera observação e nao a solução definitiva para o que você pretende fazer.

 

as dicas do william são suficientes para todas as suas questões.

 

tente entender e aplicar conforme for conveniente para o seu caso.

 

o que respondemos é baseado naquilo que você posta, pois se tiver algum detalhe a mais que não sabemos, não podemos advinhar ou palpitar è exmo

 

para o seu caso, sugiro que consulte também por strip_tags

 

http://php.net/strip_tags

 

de um modo geral, consulte as funções de manipulação de strings do manual.

 

 

obs: o título do tópico será alterado para algo mais apropriado conforme o contexto pois não se trata de bug do php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure sobre o TidyHTML... Ele vai te ajudar a "limpar" o seu HTML. ;)

 

O problema não esta no html que o usuario digita, deixe eu explicar melhor.

 

o script vai ter este formulario:

pode ser visto aqui no meu site para clariar > http://www.lucroptc.com.br/imasters.php

 

<FORM METHOD="POST" ACTION="mail.php">
<P>Seu Nome: <BR>

  <INPUT TYPE="TEXT" NAME="nome" SIZE="30">

<P>  Email do Destinatario:<BR>
  <INPUT TYPE="TEXT" NAME="estinatario" SIZE="30">
</P>
<P>
  <TEXTAREA NAME="mensagem" COLS="30" ROWS="5"></TEXTAREA>
</P>
<INPUT TYPE="SUBMIT" VALUE="Enviar E-MAIL">
</FORM>

agora vou ter outra pagina(um script php), responsavel por pegar os dados deste formulario e executa o envio do email para o destinatario que o usuario quiser.

 

<?
$nome = $_POST[nome];
$email = $_POST[destinatario];
$msg = $_POST[mensagem];
$mail = new PHPMailer();
$mail->IsSMTP();
...
$mail->Body = $msg;
$mail->AddAddress($destinatario);
$mail->Send();
?>

so que esta $mensagem ira ser um codigo html de newslater, como iria a body receber um campo deste?

sendo que poderia possuir um <a href="..> no qual daria erro por causa das ".

 

no caso ele queira enviar isto:

 

$mensagem = "<body>

<b>

<font color=#0033FF>- Melhor site de PHP é o imasters</font>

</b><br/>

<a href="http://www.imasters.com.br>Site Imasters</a>";

 

ai daria problema, porcausa das aspas entende? obrigado por todos pela ajuda :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ignora o que eu falei... Procura sobre o TinyMCE que ele vai resolver os seus problemas ou usa o striptags como o hinom falou e some com toda a formatação HTML antes de enviar o e-mail.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que tem a ver o script do primeiro post com esse script do ultimo post ?

 

explique de forma mais clara e objetiva

 

 

-----------

 

referente à quotes ou single quotes, a função addslashes já resolve

 

nao sei se você está conseguindo entender isso que já foi explicado aqui mais de 3 vezes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

referente à quotes ou single quotes, a função addslashes já resolve

 

nao sei se você está conseguindo entender isso que já foi explicado aqui mais de 3 vezes.

 

 

addslashes não resolve amigo. imagine:

 

$mensagem = "<body>

<b>

<font color=#0033FF>- Melhor site de PHP é o imasters</font>

</b><br/>

<a href="http://www.imasters.com.br>Site Imasters</a>";

 

$mensagem = addslashes($mensagem);

 

nao ira adiantar de nada, ira apenas acrescentar algumas barras a mais ali, e não ira mostrar o dominio correto.

 

Ja a respeito do Tiny, esta maneira que estais falando é super complicada, concerteza existe uma maneira mais facil para enviar emails usando o phpmailer passando links. Tiny não convem usar nesta situação mais obrigado do mesmo jeito ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.