如何按字面意思发布此图标:&

时间:2016-11-19 12:26:53

标签: php email

我试图将长文本发布到另一台服务器以发送电子邮件,但是当服务器发送电子邮件时,我并未考虑我希望得到的内容:

  

应该如何: <a target='_blank' href='http://sosgram.ga/account/access/verify.php?id='NDA='&code=237804940a1a14644fbd1cdddc165d28> Clique aquí para activar la cuenta :)</a>

     

如何: <a target='_blank' href='http://sosgram.ga/account/access/verify.php?id='NDA=' - 之后,所有消息消失

已连接的文件:

SignUp文件:

$id = $user_index->lasdID();
$key = base64_encode($id);
$id = $key;
$code = file_get_contents("PRIVATE");
$link = "http://sosgram.ga/account/access/verify.php?id='$id'&code=$code";

$message = "
<b>Hola $fullname,
<br>
Bienvenido a SOSgram</b><br><br>
Para completar su registro, simplemente clique en el siguiente link de verificación<br><br>
<a target='_blank' href='$link'>Clique aquí para activar la cuenta :)</a>
<br><br><br>
<i>Muchas gracias,<br>
SOSgram</i>";

$subject = "Confirmar Registro en SOSgram";

$user_index->send_mail($email,$message,$subject);

$msg = "<div class='alert alert-success fade in'>
        <a href='#' class='close' data-dismiss='alert' aria-label='close'>&times;</a>
        <strong>Enhorabuena!</strong>  Su registro se ha completado correctamente.<br>
        En breve recibirá un email con un link de confirmación de su cuenta
        </div>";

我只发布导致我的错误的代码,因为我检查了其他代码并且效果很好


函数文件:

function send_mail($email,$message,$subject)
{
    $url = 'PRIVATE/email.php';
    $myvars = 'email=' . $email . '&message=' . $message . '&subject=' . $subject;

    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_POST, 1);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt( $ch, CURLOPT_HEADER, 0);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

    $response = curl_exec( $ch );
}


服务器电子邮件文件:

if ($_POST['email'] and $_POST['subject'] and $_POST['message']) {
  date_default_timezone_set('Etc/UTC');
  require 'mailer/PHPMailerAutoload.php';
  $mail = new PHPMailer;

  $email = $_POST['email'];
  $subject = $_POST['subject'];
  $message = $_POST['message'];

  $mail->isSMTP();
  $mail->CharSet = 'UTF-8';
  $mail->SMTPDebug = 2;
  $mail->Debugoutput = 'html';
  $mail->Host = "smtp.sparkpostmail.com";
  $mail->Port = 587;
  $mail->SMTPAuth = true;
  $mail->Username = "SMTP_Injection";
  $mail->Password = "PRIATE";
  $mail->setFrom('verify@email.sosgram.ga', 'Verificación de Cuentas | SOSgram');
  $mail->addReplyTo('support@email.sosgram.ga', 'Soporte | SOSgram');
  $mail->addAddress("$email");
  $mail->Subject = "$subject";
  $mail->msgHTML("$message");

  if (!$mail->send()) {
      echo "Mailer Error: " . $mail->ErrorInfo;
  } else {
      echo "Message sent!";
  }
} else {echo "Bad Request";}

我认为错误在postmethod中,当服务器发送消息时,它解释链接http://sosgram.ga/account/access/verify.php?id='$id'&code=$code,因为它分隔了post方法,因为它有一个&amp;图标,因此它修剪文本并仅将消息发送到&amp;

如何强制$ _POST方法发送图标&amp;作为一个图标而不是方法中的分隔符?


由于

1 个答案:

答案 0 :(得分:4)

使用urlencode功能。

  

当编码要在URL的查询部分中使用的字符串时,此函数很方便,这是将变量传递到下一页的便捷方式。

  

返回一个字符串,其中除-_之外的所有非字母数字字符。已被替换为百分号(%),后跟两个十六进制数字和空格,编码为加号(+)。它的编码方式与编码WWW表单中的发布数据的方式相同,这与application / x-www-form-urlencoded媒体类型的方式相同。

或者,使用http_build_query

  

生成URL编码的查询字符串

$base_url = "http://sosgram.ga/account/access/verify.php?";
$query = http_build_query(Array(
    id => "'$id'", # Are you sure you want to surround the id with apostrophes?
    code => $code
));
$link = $base_url . $query;