1

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

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

4

3 回答 3

3

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

如果要生成有效的 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'

编辑

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

于 2012-11-17T12:17:18.723 回答
2

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

示例

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

输出

chicken%20soup.jpg

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

于 2012-11-17T12:12:52.823 回答
0

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

于 2012-11-17T12:07:53.587 回答