簡體   English   中英

字符串比較:PHP中JavaScript的localeCompare是否完全相同?

[英]String comparison: something identical of JavaScript's localeCompare in PHP?

有什么解決方案可以在PHP中具有與JavaScript的string.localeCompare()相同的字符串比較功能?

我的目標是制作一個哈希器,該哈希器可以應用於PHP和JS中的簡單對象。 可以基於以下問題解決屬性排序: 按屬性值對JavaScript對象進行排序

我列出了屬性鍵和值連音符的列表,並按鍵對列表進行排序。 (請注意,這也可以遞歸地工作。)但是我有點害怕字符串表示形式和語言環境,因為它們可能很棘手。 如果屬性鍵包含一些特殊字符,則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擴展

例如

<?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

你有strcmp

int strcmp ( string $str1 , string $str2 )

如果相同的字符串<0,則返回0;如果較小,則返回> 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM