这是我的代码:
$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编码。
我可能是与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>";