我在变量中有一个值如下......
$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 功能,但没有运气
答案 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'
修改强>:
您可以阅读有关差异的更多信息:
rawurlencode()
)application/x-www-form-urlencoded
(或表单帖子)编码(urlencode()
)答案 1 :(得分:2)
您的解决方案是在filename变量上使用urlencode()
。这会将空格和其他非URL友好字符转换为%20等,以便它可以用作有效URL的一部分。
示例强>:
$variable = urlencode("chicken soup.jpg"); echo $variable;
<强>输出强>:
chicken%20soup.jpg
查看 urlencode() 文档以获取更多信息。
答案 2 :(得分:0)
这是因为所有网址都已编码。可能是您的电子邮件客户端收到'chicken soup.jpg',但将其解析为网址,因此它会将“鸡+汤。”视为“网址中的''无效。