php自然不区分大小写的url编码字符串

时间:2019-02-05 14:46:07

标签: php

php函数natcasesort用自然语言对字符排序,并且不区分大小写。问题是您的数组是否使用url编码的字符。在这些情况下,已编码的(%nn,如%E4)字符在字母“ a”之前进行排序,尽管在这种情况下希望在字母“ z”之后进行排序。

我们的代码如下:

/* set internal character encoding as on page */
mb_internal_encoding("ISO-8859-1");
ob_start("mb_output_handler");
...
$dir_array[] = "<a href=\"$webdirname/$file_url\"target=_blank>$file_date</a>";
...
function put_array_vertical($input, $size, $sortByname = true, $size_is_horizontal = true, $rowSize = 740) 
{
   ...
   natcasesort($input);
   ...
}
?>

<td width="100%" valign="top" class="mfo-link">
   <?=put_array_vertical($dir_array, $inColumns, true, true, 740)?>
</td>

有没有解决此问题的简单方法?

字符集在所有地方都应该是iso-8859-1。必须在php脚本中指定它,因为在更高版本中它默认为UTF-8。

1 个答案:

答案 0 :(得分:1)

您可以定义自己的排序例程:

usort ($input , function($a, $b) { return natstrcmp(urldecode($a), urldecode($b)) });