我需要比較字符串和匹配名稱,即使它們拼寫不一樣。 例如DÉSIRÉ-Smith
應匹配Desireesmith
以及西瑞或Desi'ree Smith
iconv utf-8轉換爲mod_php/apache2中的ascii音譯
所以我有以下計算策略,其使用PHP-CLI工作完全在命令行:
<?
class Alike {
static function convertAlike($string) {
// in case the first and last name or two first names are mixed up
$parts = preg_split('/[\s\-\.\_]/', $string, -1, PREG_SPLIT_NO_EMPTY);
sort($parts);
$string = implode($parts);
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); // transliterate
$string = strtolower($string); // lowercase
$string = preg_replace('/[^a-z]/','',$string); // remove everything but a-z
$string = preg_replace('{(.)\1+}','$1',$string); // remove duplicate chars
return $string;
}
static function compareAlike($string1,$string2) {
return (strcmp(Alike::convertAlike($string1),Alike::convertAlike($string2)) === 0) ? true : false;
}
}
echo Alike::convertAlike("DÉSIRÉ-Smith").PHP_EOL; // desiresmith
echo Alike::convertAlike("Desireesmith").PHP_EOL; // desiresmith
echo Alike::convertAlike("Desi'ree Smith").PHP_EOL; // desiresmith
echo Alike::convertAlike("René Röyßeå likes special characters ½ € in ©").PHP_EOL; // reneroysealikespecialcharacterseurinc
var_dump(Alike::compareAlike("DÉSIRÉ-Smith","Desireesmith")); // true
var_dump(Alike::compareAlike("Desireesmith","Desi'ree Smith")); // true
var_dump(Alike::compareAlike("summer","winter")); // false
?>
但是在我的網站上運行Server version: Apache/2.2.14 (Ubuntu)
運行PHP Version 5.3.2-1ubuntu4.2
作爲模塊,我總是得到問題跡象。 有趣的是,該錯誤必須在這行occour
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); // transliterate
,因爲後來我可以看到每一個尚未音譯字,但那些應該被替換爲ASCII字符成爲問題的跡象。
我嘗試了輸入/輸出字符串編碼和iconv內部,輸入和輸出編碼設置以及區域設置的每種可能的組合。我甚至做了chmod -R 777/usr/lib/gconv並將其移至我的工作目錄。
但是我看到這個錯誤報道ONT他的郵件列表: http://bugs.php.net/bug.php?id=44096
[2010-06-07 21:22 UTC] icovt at yahoo dot com
mod_php iconv() is not working properly if your apache is chrooted and you do not
have the content of /usr/lib/gconv/ folder into your relative chroot path (i.e.
/your/chroot/path/usr/lib/gconv/).
You can simply do:
cp /usr/lib/gconv/* /your/chroot/path/usr/lib/gconv/
... and re-try.
This was a fix for me, hope this could save time for somebody else.
P.S. Btw, initially iconv() called from command line (using php cli) was OK.
我想,我的www數據用戶在家在/ var/WWW /我結束了與文件夾/ VAR/www/usr/lib/gconv /以及/ var/www/myproject/usr/lib/gconv/
提示:我有編碼檢測和轉碼功能,以確保正確的編碼通過,爲了清楚起見,因爲它們不是必需的,如果你輸入utf8字符串,一切都應該很好......
有什麼想法?