有没有办法让 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 中对象散列的其他想法?
看看国际扩展.
e.g.
<?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";
}
}
prints
e e 0
e é 0
e ě 0
e f -1
é é 0
é ě 0
é f -1
ě ě 0
ě f -1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)