PHP:基本名称在特殊字符上无法正常工作

问题描述 投票:0回答:1

这是我的代码:

$url = "https://de.wikipedia.org/wiki/…_und_wenn_der_letzte_Reifen_platzt";

$base = basename($url);
echo $base . "<br>";

$url2 = urlencode($base);
echo $url2 . "<br>";

$url = dirname($url) . "/" . $url2;

echo $url;
$aHeader = @get_headers($url);

echo "<pre>" . print_r($aHeader,true) . "</pre>";

在我的本地计算机上运行良好(使用PHP v7.3.12运行Xampp)-$base编码为%E2%80%A6_und_wenn_der_letzte_Reifen_platzt

但是在我的服务器上运行时,$base将编码为_und_wenn_der_letzte_Reifen_platzt,这是错误的,并会导致错误404(服务器正在PHP 7.2.24上运行)。

任何想法导致此行为的原因是什么?这两个脚本均以UTF-8编码。

php urlencode basename
1个回答
0
投票

我可能是与basename功能有关的错误。因为如果将字符与und_wenn_der_letzte_Reifen_platzt部分中的字母混合使用,则可以按预期工作。如果可能,您可以尝试在服务器上升级与本地版本匹配的PHP。

如果您无法执行此操作,总会有更好的方法使用正则表达式来实现。

$re = '/.+\/(.*)/m';
$str = 'https://de.wikipedia.org/wiki/…_und_wenn_der_letzte_Reifen_platzt';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

$base = $matches[0][1];
echo $base . "<br>";

$url2 = rawurlencode($base);
echo $url2 . "<br>";
© www.soinside.com 2019 - 2024. All rights reserved.