2012-11-17 24 views
1

我在变量的值如下...空间由“+”在链路替换在PHP

$variable = "chicken soup.jpg"; 

当i执行以下操作,空间被转换为+符号在输出

$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函数功能但没有运气

+0

它是'$变量= “鸡soup.jpg”;' – tobspr

+0

你说的“正常工作意味着什么“?你的预期产出是多少? – Maccath

+0

,你错过了分号。 – tobspr

回答

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' 

编辑

你可以阅读更多关于差异

如果你想产生一个有效的URL,以手动对其进行编码:

0

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

+0

我应该如何纠正它?我的意思是,我希望它应该是因为它是变量..所以我可以发送适当的电子邮件。 – logan

+0

这是正确的..空格是错误的,'+'是正确的。 – tobspr

+0

www.abc.com/chicken+soup.jpg在浏览器中不起作用... www.abc.com/chicken soup.jpg正在浏览器中工作... – logan

2

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

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

输出

chicken%20soup.jpg 

检查的urlencode()文档的详细信息。