4

对不起我的英语。

我用php建立了一个链接。我通过电子邮件发送。有时链接(在电子邮件中)已损坏。

当我单击(或复制到浏览器)时,已在随机位置插入了一个空白区域。

任何想法?

生成邮件,代码如下:

$url="www.example.com/dir/subdir/page.php?param1=$p1&param2=$p2&param3=$p3[...]&param20=$p20";
    [...]
    $body .= "<td><a href=\"$url\">";
    $body .= htmlentities($url,ENT_NOQUOTES,'ISO-8859-1');
    $body .= "</a></td>";
    [...]

$headers  = "From: $companyName < $companyMail > \r\n";
$headers .= "Reply-To: $companyMail \r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 ";
$headers .= "Content-Type: text/html; charset=ISO-8859-1";
$headers .= "MIME-Version: 1.0 ";

mail($client, "Confirmaton", $body, $headers);

page.php 上的示例接收参数

代码:

echo "<pre>Request:<br>";
print_r($_REQUEST);
echo "</pre><br>";
exit;


case OK:
Request:
Array
(
    [p1] => value1
    [p2] => value2
    [p3] => value3
    [p3] => value5
    [p4] => value6
    [p5] => value7
    (...)
    [p20] => value20

)

Error1 (link with space in value)
Request:
Array
(
    [p1] => value1
    [p2] => val ue2
    [p3] => value3
    [p3] => value5
    [p4] => value6
    [p5] => value7
    (...)
    [p20] => value20

)

Error2 (link with space in variable)
Request:
Array
(
    [p1] => value1
    [p2] => value2
    [p_3] => value3
    [p3] => value5
    [p4] => value6
    [p5] => value7
    (...)
    [p20] => value20

)
4

2 回答 2

0

尝试强制 php 避免包装链接:

$link = wordwrap($url, 255, "\r\n");

这可能是由于每个邮件客户端在电子邮件正文中放入的换行符造成的。

于 2013-09-20T18:03:36.303 回答
0

空格和换行符会破坏您的网址。这不是一个错误。这是您的 smtp 服务器对一行的限制。因此 RFC 2821 和 5321 定义了最大行长度:包括 在内的文本行的最大总长度为 1000(有时为 990)八位字节(不包括为透明度而重复的前导点)。这个数字可以通过使用 SMTP 服务扩展来增加。

<td>解决方案可以是每个or之后的换行符<tr>

$body .= "<td><a href=\"$url\">";
$body .= htmlentities($url,ENT_NOQUOTES,'ISO-8859-1');
$body .= "</a></td>\n";
于 2014-10-24T12:53:03.453 回答