Проблемы с кодировкой PHP - PullRequest
2 голосов
/ 22 апреля 2011

У меня проблема с кодом PHP, который преобразует символы ударения в символы без ударения. У меня этот код работает год назад, но я пытаюсь заставить его работать, но безуспешно. Перевод сделан неправильно.

Вот код:

<?php

echo accentdestroyer('azeméis');

    /**
     * 
     * This function transform accent characters to non accent characters
     * @param text $string
     */
    function accentdestroyer($string) {
        $string=strtr($string,
        "()!$?: ,&+-/.ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ"
        ,
        "-------------SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy");

        return $string;
    }

?>

Я проверил, чтобы сохранить документ в UTF-8, но выдает что-то вроде этого: "azemy is"

Некоторые подсказки о том, что я могу сделать, чтобы это работало правильно?

С наилучшими пожеланиями,

1 Ответ

2 голосов
/ 22 апреля 2011

Лучшим решением может быть транслитерация этих символов автоматически с использованием iconv().

По той причине, что ваша функция не 'Это может быть связано с тем, что echo strlen('Š'); выводит 2. Документация явно ссылается на однобайтовые символы .

Также,

$a = 'Š';

var_dump(strtr('Š', 'Š', '!')); // string(2) "!�"

Таким образом, первый байт соответствует, но второй (оставшийся) не является байтом, указывающим на действительный символ Unicode.

Обновление

Вот рабочий знакпример использования iconv().

$str = 'ŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚ';

$str = iconv("utf-8", "us-ascii//TRANSLIT", $str); 

var_dump($str); // string(37) "OEZsoezY?uAAAAAAAECEEEEIIII?NOOOOO?UU"

Некоторые символы не совсем переведены, например ¥ и Ø, но большинство сделали.Вы можете добавить //IGNORE к выходному набору символов, чтобы молча отбросить те, которые не транслитерируются.

Вы также можете отбросить все несловарные символы, используя регулярное выражение Unicode с \pL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...