복붙노트

PHP : 움라우트를 UTF-8 문자열에서 가장 가까운 7 비트 ASCII로 바꾸십시오.

PHP

PHP : 움라우트를 UTF-8 문자열에서 가장 가까운 7 비트 ASCII로 바꾸십시오.

내가하고 싶은 일은 문자열에서 모든 악센트와 움라우트를 제거하고 "lärm"을 "larm"또는 "andré"을 "andre"로 바꾸는 것입니다. 내가 뭘하려고했는지 utf8_decode 문자열을 누른 다음 strtr을 사용하지만 내 소스 파일이 UTF-8 파일로 저장 되었기 때문에 모든 움라우트에 ISO-8859-15 문자를 입력 할 수 없습니다. UTF-8 문자.

분명히 이것을위한 해결책은 ISO-8859-15 파일 인 include를 포함하는 것이지만, 다른 필수 include를 포함하는 것보다 더 좋은 방법이 있어야합니까?

echo strtr(utf8_decode($input), 
           'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ',
           'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');

업데이트 : 어쩌면 나는 내가하려고하는 것에 대해 약간 부정확했다. 나는 움라우트를 실제로 제거하고 싶지는 않지만, 그것들을 가장 가까운 "한 문자 ASCII"와 대체 할 수있다.

해결법

  1. ==============================

    1.

    iconv("utf-8","ascii//TRANSLIT",$input);
    

    확장 예제

  2. ==============================

    2.로케일을 설정하거나 거대한 변환 테이블을 필요로하지 않는 약간의 트릭 :

    로케일을 설정하거나 거대한 변환 테이블을 필요로하지 않는 약간의 트릭 :

    function Unaccent($string)
    {
        if (strpos($string = htmlentities($string, ENT_QUOTES, 'UTF-8'), '&') !== false)
        {
            $string = html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i', '$1', $string), ENT_QUOTES, 'UTF-8');
        }
    
        return $string;
    }
    

    파일이 제대로 작동하려면 UTF-8로 파일을 저장해야합니다 (이미 수행 한 것처럼).

  3. ==============================

    3.당신은 또한 이것을 시도 할 수있다.

    당신은 또한 이것을 시도 할 수있다.

    $string = "Fóø Bår";
    $transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD);
    echo $normalized = $transliterator->transliterate($string);
    

    하지만 http://php.net/manual/en/book.intl.php를 사용할 수 있어야합니다.

  4. ==============================

    4.좋아, 나 자신이 분명한 해결책을 찾았지만 성능면에서 최상은 아니야.

    좋아, 나 자신이 분명한 해결책을 찾았지만 성능면에서 최상은 아니야.

    echo strtr(utf8_decode($input), 
               utf8_decode('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'),
               'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');
    
  5. ==============================

    5.아랍어 및 페르시아어 사용자의 경우 발음 구별 부호를 제거하려면 다음과 같이하는 것이 좋습니다.

    아랍어 및 페르시아어 사용자의 경우 발음 구별 부호를 제거하려면 다음과 같이하는 것이 좋습니다.

        $diacritics = array('َ','ِ','ً','ٌ','ٍ','ّ','ْ','ـ');
        $search_txt = str_replace($diacritics, '', $diacritics);
    

    아랍어 키보드에서 발음 구별 부호를 입력하기 위해 u를 사용할 수 있습니다 (이 코드는 Asci가 아닌 유니 코드입니다) 코드는 Windows 편집기에서 분음 부호를 직접 입력하거나 Alt + (분음 기호 문자 입력) 이것은 코드입니다.

    ـَ(0243) ـِ(0246) ـُ(0245) ـً(0240) ـٍ(0242) ـٌ(0241) ـْ(0250) ـّ(0248) ـ ـ(0220)

  6. ==============================

    6.나는 이것이 프랑스와 독일에서 가장 일관된 결과를 제공한다는 것을 발견했다. 메타 태그를 utf-8로 설정하면 단어 배열에서 줄을 반환하는 함수에 배치하고 완벽하게 작동합니다.

    나는 이것이 프랑스와 독일에서 가장 일관된 결과를 제공한다는 것을 발견했다. 메타 태그를 utf-8로 설정하면 단어 배열에서 줄을 반환하는 함수에 배치하고 완벽하게 작동합니다.

    htmlentities (  $line, ENT_SUBSTITUTE   , 'utf-8' ) 
    
  7. ==============================

    7.WordPress를 사용하는 경우에는 내장 함수 remove_accents ($ string)를 사용할 수 있습니다.

    WordPress를 사용하는 경우에는 내장 함수 remove_accents ($ string)를 사용할 수 있습니다.

    https://codex.wordpress.org/Function_Reference/remove_accents

    그러나 버그를 발견했습니다. 단일 문자가있는 문자열에는 작동하지 않습니다.

  8. from https://stackoverflow.com/questions/158241/php-replace-umlauts-with-closest-7-bit-ascii-equivalent-in-an-utf-8-string by cc-by-sa and MIT license