【问题标题】:Long e-mail link sent by PHP mailer gets brokenPHP 邮件程序发送的长电子邮件链接被破坏
【发布时间】:2014-11-22 21:31:50
【问题描述】:
我需要使用 PHP 发送一个很长的链接。已知问题:链接被电子邮件客户端破坏。我已经尝试过使用纯文本/文本或 html 邮件,我将 url 放在括号 () 中,就像其他线程中建议的那样 - 没有任何帮助。我知道 url 缩短器和用数据库解决这个问题的可能性,但是!!!可以发送数百个字符的链接;例如Ebay 有,亚马逊有……从 stackoverflow 确认注册的链接包含超过 250 个字符,所以?!查看这些邮件的源代码,默认情况下,所有行都在 76 个字符后换行。我尝试对 PHP 自动换行做同样的事情。结果;源代码看起来相同,但我的链接坏了,他们的链接没有!有任何想法吗?我会很高兴得到帮助,因为这让我很困扰!!!! :)
【问题讨论】:
标签:
php
email
url
hyperlink
long-integer
【解决方案1】:
我可以自己解决问题。首先,必须对链接的特殊字符进行编码(例如,Thunderbird 现在会像这样接受编码的链接)。其次,在 76 个字符后默认设置换行符。为了避免链接被破坏或不再被客户端程序识别为链接,每一行都需要以“=”结尾才能重新组合...
<?php
$url = 'http://domainxy.com/index.php';
$ending = '?var1=gsgsdgsfgdhfjfgj&var2=sdferewerwrr&var3=jghjghjkloozzzz&var4=ghajsldahskhdhriehfsjndfnjnjjfnjsnjdfhksö&var5=öäüöü';
$ending = utf8_encode($ending);
$ending = rawurlencode($ending);
$link = wordwrap( $url . $ending, 75, "=<br />\n", true );
echo $link;
?>
/*
Encodes and devides the link like this:
http://domainxy.com/index.php%3Fvar1%3Dgsgsdgsfgdhfjfgj%26var2%3Dsdferewerw=
rr%26var3%3Djghjghjkloozzzz%26var4%3Dghajsldahskhdhriehfsjndfnjnjjfnjsnjdfh=
ks%C3%B6%26var5%3D%C3%B6%C3%A4%C3%BC%C3%B6%C3%BC
*/