如何正确对字符串进行 URL 编码

3

我正在尝试将文件名解析为 URL 字符串。

文件名是:

201-SALÃO DE JOGOS.jpg

我需要的输出正好是这样的:
201-SAL%c3O%20DE%20JOGOS.jpg

我尝试像这样:

$var = 201-SALÃO DE JOGOS.jpg;
echo urlencode($var);

但实际上它返回的是:
201-SAL%C3%83O+DE+JOGOS.jpg

这不是一个有效的URL。我已经尝试使用 htmlspecialchars()htmlentities(),但这些方法并不起作用。


3
“这不是一个有效的网址。” “当然是啊,为什么不是呢?” - PeeHaa
我需要空格变成%20而不是+。这是唯一的问题。 - Ivan Moreira
我能理解为什么你想要使用%20而不是+吗?@IvanMoreira - SaidbakR
2个回答

2
您需要使用rawurlencode函数。
$filename = "201-SALÃO DE JOGOS.jpg";
print rawurlencode($filename);

mb_rawurlencode 是无意义的;rawurlencode 在字节级别上工作,根本不关心编码。实际上,这两个函数的结果是相同的。我不知道为什么那个评论者认为 mb 变体会有任何用处。 - deceze
1
@deceze:好的。感谢更新。已删除评论。 - Bhavik Shah
非常感谢!我的代码现在是 $var = '201-SALÃO DE JOGOS.jpg'; echo rawurlencode(utf8_decode($var)); - Ivan Moreira
@IvanMoreira:为什么你要使用utf8_decode,而rawurlencode已经提供了你需要的内容呢? - Bhavik Shah
rawurlencode is not giving me exactly what i want( i don't know why). To make the string be exactly the way i want, i had to use utf8_decode - Ivan Moreira
@Ivan 我明白了。你实际上想要将字符串编码为ISO-8859-1。也许你应该在源代码中进行修复,因为现在你似乎正在使用UTF-8编码的字符串。 - deceze

0

您可以使用str_replace函数将+替换为%20

<?php

$var = "201-SALÃO DE JOGOS.jpg";
$output = str_replace('+','%20',urlencode($var));
echo $output;
echo "*****";
echo urldecode($output);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接