javascript - 字符串比较 : something identical of JavaScript's localeCompare in PHP?

标签 javascript php string-comparison

是否有任何解决方案可以让 PHP 中的字符串比较函数与 JavaScript 的 string.localeCompare() 相同?

我的目标是制作一个可以应用于 PHP 和 JS 中的简单对象的哈希器。可以根据以下问题解决属性排序: Sorting JavaScript Object by property value

我制作了一个属性键和值元组列表,并按键对列表进行排序。 (请注意,这也可以递归工作。)但我有点害怕字符串表示和语言环境,它们可能很棘手。如果属性键包含一些花哨的字符,那么 PHP 和 JS 端的排序可能不同,从而导致不同的哈希值。

在PHP中试试下面的,在JS中做类似的对比。

echo strcmp('e', 'é')."\n";
echo strcmp('e', 'ě')."\n";
echo strcmp('é', 'ě')."\n";
echo strcmp('e', 'f')."\n";
echo strcmp('é', 'f')."\n"; // This will differ
echo strcmp('ě', 'f')."\n"; // This will differ

主要问题:如何在 PHP 和 JS 中执行相同的字符串比较?

附带问题:PHP 和 JS 中对象散列的其他想法?

最佳答案

看看 intl extension .

例如

<?php
// the intl extensions works on unicode strings
// so this is my way to ensure this example uses utf-8
define('LATIN_SMALL_LETTER_E_WITH_ACUTE', chr(0xc3).chr(0xa9));
define('LATIN_SMALL_LETTER_E_WITH_CARON', chr(0xc4).chr(0x9b));
ini_set('default_charset', 'utf-8');
$chars = [
    'e',
    LATIN_SMALL_LETTER_E_WITH_ACUTE,
    LATIN_SMALL_LETTER_E_WITH_CARON,
    'f'
];

$col = Collator::create(null);  // the default rules will do in this case..
$col->setStrength(Collator::PRIMARY); // only compare base characters; not accents, lower/upper-case, ...

for($i=0; $i<count($chars)-1; $i++) {
    for($j=$i; $j<count($chars); $j++) {
        echo $chars[$i], ' ', $chars[$j], ' ',
            $col->compare($chars[$i], $chars[$j]),
            "<br />\r\n";
    }
}

打印

e e 0
e é 0
e ě 0
e f -1
é é 0
é ě 0
é f -1
ě ě 0
ě f -1

关于javascript - 字符串比较 : something identical of JavaScript's localeCompare in PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32269568/

相关文章:

javascript - 当客户端修改两个按钮的 javascript 函数参数相同时,SQL/PHP 会更新多行

php - 使用 PHP 框架会影响性能吗?

javascript - React/Javascript 映射函数 - 返回数组

javascript - 除数字外,如何按字母顺序对对象数组进行排序?

javascript - 可以巧妙地使用数据表作为源数据吗?

c - 如何比较 C 中的字符串命令行参数?

c - 将新用户添加到 c 程序中的列表

php - 从不同的列中选择多个值

php - 一种整理 PHP 代码的方法

c# - 允许搜索重音字符吗?