iconv utf-8 mod_php/apache2 ascii çevirisi için

0 Cevap php

I need to compare strings and match names to one another even if they are not spelled the same way. For example DÉSIRÉ-Smith should match Desireesmith as well as Desiree or Desi'ree Smith

Yani PHP-CLI kullanarak komut satırında mükemmel çalıştı aşağıdaki approch vardı:

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

However in my website running Server version: Apache/2.2.14 (Ubuntu) running PHP Version 5.3.2-1ubuntu4.2 as module I always get just question signs. The funny thing is that the error must occour in this line

$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string); // transliterate

Çünkü sonradan ben dönüştürülümünden olmamıştır her karakter görebilirsiniz, ama ascii karakter ile yerini almış olanlar soru işaretleri olur.

i giriş / çıkış dizesi kodlama ve iconv iç, giriş ve çıkış kodlama ayarları yanı sıra yerel ayarlarında her türlü kombinasyonu denedim. i bile chmod-R 777 / usr / lib / gconv yaptım ve benim çalışma dir taşındı.

however i saw this bug reported ont he mailing list: 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.

Benim www-data kullanıcı / var / www evde olduğunu denedim / ve ben klasör / var / www / usr / lib / gconv / yanı sıra / var / www / Projem / usr / lib / gconv ile sona erdi /

Bilginize: Ben doğru kodlamaları geçirilecek sağlamak için algılama ve kodlama fonksiyonları kodlayan, ancak giriş utf8 dizeleri her şey yolunda olmalı, eğer onlar anwyay gerekli değil gibi netlik uğruna onları çıkarmıştı ...

Herhangi bir fikir?

0 Cevap