Je dois comparer les chaînes et faire correspondre les noms les uns aux autres même s'ils ne sont pas orthographiés de la même manière. Par exemple DÉSIRÉ-Smith
doit correspondre Desireesmith
ainsi que Désirée ou Desi'ree Smith
iconv utf-8 à ascii translittération dans mod_php/apache2
donc j'ai eu l'approch suivant qui fonctionnait parfaitement dans la ligne de commande en utilisant 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
?>
Cependant, dans mon site en cours d'exécution Server version: Apache/2.2.14 (Ubuntu)
en cours d'exécution PHP Version 5.3.2-1ubuntu4.2
En tant que module, je reçois toujours des signes de question. Le plus drôle est que l'erreur doit occour dans cette ligne
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); // transliterate
parce qu'après je peux voir tous les caractères qui n'a pas été transcrite, mais ceux qui auraient dû être remplacés par ascii caractères deviennent des signes d'interrogation.
J'ai essayé toutes les combinaisons possibles de codage de chaîne d'entrée/sortie et de réglages d'icône interne, d'entrée et de sortie d'iconv ainsi que les paramètres régionaux. J'ai même fait chmod -R 777/usr/lib/gconv et déplacé le à mon répertoire de travail.
cependant j'ai vu ce bug a rapporté en Ontario, il liste de diffusion: 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.
J'ai essayé que mon utilisateur www-data est à la maison dans/var/www/et j'ai fini avec le dossier/var/www/usr/lib/gconv/ainsi que/var/www/myproject/usr/lib/gconv/
FYI: j'avais des fonctions de détection et de transcodage de codage pour assurer le passage correct des encodages, mais les supprimer par souci de clarté car ils ne sont pas nécessaires anwyay si vous entrez des chaînes utf8 tout devrait être bien ...
Des idées?