Trim space 在 PHP 的变量中不起作用

Trim space in the variable with PHP not working

我正在使用 PHP 将图像转换为 base64 编码。我在获取 $path 时遇到问题,因为如果我将变量放在 $path 中,$path 数据有 space。

比如我去echo $path 看结果是uploads/ 2007170312_download.jpg。我可以知道如何删除 2007170312_download.jpg 前面的 space 吗?我想要的预期结果是 uploads/2007170312_download.jpg

下面是我的示例代码:

$logo_file_path = '2007170312_download.jpg';
$path = "uploads/".$logo_file_path;
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

echo $path;

我已经试过了,但是没有用,结果还是一样:

trim function

$path_test = str_replace(' ','',trim($path));
echo $path_test;

urlencode function ,结果是错误的,告诉我 uploads%2F%0A2007170312_download.jpg.

$path_test = str_replace(' ','',urlencode($path));
echo $path_test;

希望有人能指导我如何解决。谢谢。

我已经 运行 你附加的代码,在那个例子中,路径字符串中不可能有空格,在开头或结尾(在那个例子中)。

trim 去掉字符串开头和结尾的空格。

https://www.php.net/manual/en/function.trim.php

我认为可能存在其他类型的问题 - 因为您使用的 str_replace 应该已成功删除字符串中任何位置的任何空格。

我认为你根本不想在这里使用 urlencode

你能post一个更接近正在发生的事情的例子吗?

在每个语句之后打印可以很方便地查看到底发生了什么,例如:

<?php

  $logo_file_path = 'zzz.jpg';
  $path = "./" . $logo_file_path;
  print $path . "\n";

  $type = pathinfo($path, PATHINFO_EXTENSION);
  print $type . "\n";

  $data = file_get_contents($path);
  $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

抱歉,我无法重现您的问题。当我 copy-and-paste 你的代码进入我的 IDE (Visual Studio 代码)并执行它时(注释掉第 4 行和第 5 行以避免在到达 [=12= 之前出现错误消息和流产) ] 命令)我在控制台中得到输出 uploads/2007170312_download.jpg,即没有任何空格。 显然没有理由使用 trim()str_replace() 函数来获取数据文件的正确路径。

编辑:而且,正如这里其他地方所说的那样,trim() 无论如何也无济于事,因为它只删除了前导和尾随的空格,但没有 字符串中的空格。

Edit2:您是否错误地在文件名中添加了一个前导空格
(即' 2007170312_download.jpg'或在路径的目录部分添加了一个尾随空格
(即 "uploads/ ")在您的原始代码中?

Edit3:但这并不能解释为什么 str_replace() 不起作用。执行以下行

<?php

$logo_file_path = ' 2007170312_download.jpg'; // leading whitespace in string intended
$path = "uploads/ ".$logo_file_path;  // trailing whitespace in string intended
$type = pathinfo($path, PATHINFO_EXTENSION);
// $data = file_get_contents($path);
// $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

echo $path . "\n";

$path_test = str_replace(' ','',trim($path));

echo $path_test;

导致以下输出:

uploads/  2007170312_download.jpg
uploads/2007170312_download.jpg

所以你的示例代码工作正常(即使其中的trim()根本没有效果,可以省略),问题一定是在其他地方......

您可以使用 preg_replace 删除路径中的空格

$logo_file_path = '20 07170312_download.jpg';
$path = preg_replace('/\s+/', '', 'uploads/' . $logo_file_path);

echo $path;
//Output : uploads/2007170312_download.jpg