首页 > 解决方案 > 在 PHP 不工作的情况下修剪变量中的空间

问题描述

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

例如我去回显 $path 以查看结果是uploads/ 2007170312_download.jpg. 我可以知道如何删除前面的空间2007170312_download.jpg吗?我想要的预期结果是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;

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

标签: phpbase64

解决方案


抱歉,我无法重现您的问题。当我将您的代码复制并粘贴到我的 IDE(Visual Studio 代码)中并执行它(第 4 行和第 5 行注释掉,以避免在到达echo命令之前出现错误消息和中止)时,我得到了输出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()其中根本没有效果并且可以省略),问题必须在其他地方......


推荐阅读