|
@@ -146,9 +146,15 @@ function parseUrl (&$body) {
|
|
|
if ((preg_match($MailTo_PReg_Match, $mailto, $regs)) && ($regs[0] != '')) {
|
|
|
//sm_print_r($regs);
|
|
|
$mailto_before = $target_token . $regs[0];
|
|
|
- $mailto_params = $regs[10];
|
|
|
+ /**
|
|
|
+ * '+' characters in a mailto URI don't need to be percent-encoded.
|
|
|
+ * However, when mailto URI data is transported via HTTP, '+' must
|
|
|
+ * be percent-encoded as %2B so that when the HTTP data is
|
|
|
+ * percent-decoded, you get '+' back and not a space.
|
|
|
+ */
|
|
|
+ $mailto_params = str_replace("+", "%2B", $regs[10]);
|
|
|
if ($regs[1]) { //if there is an email addr before '?', we need to merge it with the params
|
|
|
- $to = 'to=' . $regs[1];
|
|
|
+ $to = 'to=' . str_replace("+", "%2B", $regs[1]);
|
|
|
if (strpos($mailto_params, 'to=') > -1) //already a 'to='
|
|
|
$mailto_params = str_replace('to=', $to . '%2C%20', $mailto_params);
|
|
|
else {
|