在PHP中的链接中,空格被'+'替换

时间:2012-11-17 12:04:39

标签: php html

我在变量中有一个值如下......

$variable = "chicken soup.jpg";

当我执行以下操作时,空格将在输出中转换为+符号

$body = "www.abc.com/" . $variable
mail($to, $subject, $body,$headers)
  

收到的邮件输出: www.abc.com/chicken+soup.jpg

但我想要输出如下?请帮忙

  

预期产出:www.abc.com/chicken%20soup.jpg或   www.abc.com/chicken soup.jpg

我尝试使用 str_replace 功能,但没有运气

3 个答案:

答案 0 :(得分:3)

我很确定,如果您的电子邮件客户端支持查看该邮件的简单来源,您会发现网址为"www.abc.com/chicken soup.jpg";只有您的浏览器/电子邮件客户端对其进行编码,因为它是无效的URL。

如果要生成有效的网址,请使用以下方法手动编码:

$body = 'www.abc.com/' . urlencode( $variable );
// this will be 'www.abc.com/chicken+soup.jpg' as this is a valid url

或:

$body = 'www.abc.com/' . rawurlencode( $variable );
// this will be 'www.abc.com/chicken%20soup.jpg'

修改

您可以阅读有关差异的更多信息:

答案 1 :(得分:2)

您的解决方案是在filename变量上使用urlencode()。这会将空格和其他非URL友好字符转换为%20等,以便它可以用作有效URL的一部分。

示例

$variable = urlencode("chicken soup.jpg"); echo $variable;

<强>输出

chicken%20soup.jpg

查看 urlencode() 文档以获取更多信息。

答案 2 :(得分:0)

这是因为所有网址都已编码。可能是您的电子邮件客户端收到'chicken soup.jpg',但将其解析为网址,因此它会将“鸡+汤。”视为“网址中的''无效。