【问题标题】:PHP header returning with spaces when using variables?使用变量时PHP标头返回空格?
【发布时间】:2012-02-27 15:38:57
【问题描述】:

我之前问过一个问题,但我想我错过了重点,所以我要再次发布。

我正在使用标头 Content-Disposition。

我以前这样做的代码是这样的:

header("Content-Disposition: attachment; filename='{$name}'");

它返回这个:

Content-Disposition 附件; filename='Bassnectar - Bass Head Official.mp3'

注意引号前后的空格。这是一个问题,因为它将扩展名从“.mp3”更改为“.mp3”,这被识别为不同的文件。必须有某种方法来解决这个问题。我改变了一切,我用谷歌搜索了一切。我不知道还剩下什么?

【问题讨论】:

  • 你试过在 $name 上使用 trim() 吗?

标签: php variables header spacing


【解决方案1】:

试试这些:

<?php
$str = preg_replace('/\s\s+/', ' ', $str);
?>

<?php
$string = trim(ereg_replace(' +', ' ', $string));
?>

<?php
$name=preg_replace('/\s+/','',$name);
?>

最后一个可能最适合你。

那些会从你的字符串中删除空格,只要确保有一个对应的文件可以匹配,

【讨论】:

  • $name=preg_replace('/\s+/','',$name);返回:Bassnectar-BassHeadOfficial.mp3(我用一首歌作为测试)效果很好,只是它删除了标题中的每个空格。我可以做名字的事情 str_replace(" ", "", $name) $string = trim(ereg_replace(' +', ' ', $string));返回:Bassnectar $str = preg_replace('/\s\s+/', ' ', $str);返回:Bassnectar
  • 为什么要删除 all 空格?我认为问题只是一开始的空间。
  • @RosengustaGarrett - 您只想从扩展中删除空格...您可以创建两个名为 $name 和 $ext 的变量,然后将空格删除器用于 $ext 并将其与 $name 合并像 '$name' 。 '$ext'
  • @Tadeck 我并不想删除所有空格,只是删除最前面和最后面的空间。
  • @RosengustaGarrett - 很高兴听到这个消息。
【解决方案2】:

在放入标题之前,您应该对 URL 进行编码并修剪多余的空格。

$name = rawurlencode(trim($name));
header("Content-Disposition: attachment; filename='{$name}'");

最终解决方案

$name = $extract['original_name'];
$name2 = urlencode(trim($name));
$name3 = str_replace("+", " ", $name2);
$quote = '"';
header("Content-Disposition: attachment; filename=$quote{$name3}$quote");

我很确定你可以把它清理干净:

$name = $extract['original_name'];
$name = urlencode(trim($name));
$name = str_replace("+", " ", $name);
header("Content-Disposition: attachment; filename=\"{$name}\"");

而且,如果 urlencode 似乎没有什么不同,我很确定你可以这样做:

$name = $extract['original_name'];
$name = trim($name);

header("Content-Disposition: attachment; filename=\"{$name}\"");

【讨论】:

  • @RosengustaGarrett 抱歉,没想到!我确定了答案。请尝试一下,如果它解决了问题,请告诉我。
  • @RosengustaGarrett 等一下!浏览器应该自动正确解码,从而访问正确的文件。如果它不起作用,则删除 urlencode() 调用并留下 trim()
  • @RosengustaGarrett 好歌,顺便说一句!
  • @RosengustaGarrett 你不应该做 str_replace。
  • @RosengustaGarrett 更新了答案,请尝试rawurlencode 而不是urlencode
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
相关资源
最近更新 更多