字符串比较:与JavaScript';PHP中的localeCompare?
有什么解决方案可以让PHP中的字符串比较函数与JavaScript的字符串比较:与JavaScript';PHP中的localeCompare?,javascript,php,string-comparison,Javascript,Php,String Comparison,有什么解决方案可以让PHP中的字符串比较函数与JavaScript的string.localeCompare()相同吗 我的目标是制作一个hasher,它可以应用于PHP和JS中的简单对象。属性排序可以根据以下问题解决: 我制作了一个属性键和值元组的列表,并按键对列表进行排序。(请注意,这也可以递归工作。)但我有点担心字符串表示和区域设置,它们可能很棘手。如果属性键包含一些奇特的字符,那么在PHP和JS端排序可能不同,从而导致不同的哈希 在PHP中尝试以下内容,并在JS中进行类似的比较 ech
string.localeCompare()
相同吗
我的目标是制作一个hasher,它可以应用于PHP和JS中的简单对象。属性排序可以根据以下问题解决:
我制作了一个属性键和值元组的列表,并按键对列表进行排序。(请注意,这也可以递归工作。)但我有点担心字符串表示和区域设置,它们可能很棘手。如果属性键包含一些奇特的字符,那么在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中对象哈希的其他想法 你有strcmp吗
int strcmp ( string $str1 , string $str2 )
如果同一字符串小于0,则返回0;如果字符串大于0,则返回0查看
e、 g
我在问题中添加了一个示例,
strcmp
将失败。strcmp
是一个简单的二进制比较函数localCompare
是一种(部分)语言感知比较。它们是不同的。我不知道如何在JavaScript中提供完全相同的功能。不过谢谢你的主意,我会四处看看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