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
我正在使用 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