Проблема с iconv

scorpion-ds

Новичок
Имеется следующий код:

PHP:
$str = 'текст';
print iconv('UTF-8', "ASCII//TRANSLIT", $str);
он вызывает следующую ошибку:
Notice: iconv() [function.iconv]: Detected an illegal character in input string in E:\www\hosts\square\public\test2.php on line 7

Пробовал выполнить этот код на двух других серверах, там все нормально, а локально работать не хочет.

System OverviewPHP Version 5.3.9-ZS5.6.0
Zend Framework Version 1.11.11
Подскажите, за счет чего может появляться эта ошибка?

P.S.: Я упростил код, на самом деле, фрагмент кода выглядит так:
PHP:
if (PHP_OS != 'AIX') {
            $this->_input = iconv($this->_encoding, 'ASCII//TRANSLIT', $this->_input);
        }
это из Zend Framework.
 

scorpion-ds

Новичок
Как следует из ошибки, первый аргумент не в UTF-8.
Это я и так понял, но я сливаю тот же тестовый файл сохраненный в UTF-8 на два других сервака и все работает нормально, только локально возникает такая проблема.
 

alekciy

Новичок
Это я и так понял, но я сливаю тот же тестовый файл сохраненный в UTF-8 на два других сервака и все работает нормально, только локально возникает такая проблема.
А из чего следует, что на этом серваке $this->_encoding = 'UTF-8'. Я даже более скажу. Кто сказал, что на проблемном сервере есть UTF-8? Может оно там utf8?

Я бы для проверки выбросил этот код и написал тестовый. Исходные данные записать в файл, прочесть его из PHP и отравить в iconv как в первом варианте, т.е. ни каких неопределенных $this->_encoding. Если проблема будет и там, смотреть список кодировок в каждой системе, сравнивать версии. В этом видимо расхождение.
 

scorpion-ds

Новичок
$this->_encoding, точно содержит строку utf-8, я проверял, но не в это суть, вот это:
PHP:
$str = 'текст';
print iconv('UTF-8', "ASCII//TRANSLIT", $str);
и есть тестовый код, он у меня сохранен в utf-8 в отдельном файле (test2.php), сейчас попробовал уже на 3-м сервере, все работает нормально, выводит вопросики, но ошибки нет.
 

alekciy

Новичок
все работает нормально, выводит вопросики
Видимо браузер не смог определить кодировку потому что: её нет в meta теге (если это просто текст, то логично) её нет или она некорректная в HTTP заголовке. В любом случае если переключиться в браузере на utf-8 вруную кракозябры должны тут же пропасть.
 

scorpion-ds

Новичок
Сегодня протестировал тот же тестовый код на работе, в итоге на моей машине такие же проблемы, у меня тоже стоит Zend Server CE, а вот на другой машине, где стоит Денвер, ошибки нет, но и вопросиков нет, кириллица пропадает латинский текст остается.
 

dadoc

Новичок
Разница может быть в версии самой библиотеки iconv которая установлена на разных машинах.
 

scorpion-ds

Новичок
Разница может быть в версии самой библиотеки iconv которая установлена на разных машинах.
Я тоже так думаю, а учитывая, что iconv входит в ядро PHP (или это не так?), то подменить его мне не чем, кстати в самом Zend Server CE есть файл iconv.dll, то есть он идет отдельно, но вот тут http://windows.php.net/download/, я не смог найти его отдельно.

В общем проблему я решил, методом лома, то есть просто фактически убрал проблемный участок из исходного кода Zend Framework:

PHP:
// convert input into ascii
        if (PHP_OS != 'AIX') {
	    /*$this->_input = iconv($this->_encoding, 'ASCII//TRANSLIT', $this->_input);*/
            $this->_input = iconv($this->_encoding, 'UTF-8//TRANSLIT', $this->_input);
        }
	/*$this->_encoding = 'ASCII';*/
	$this->_encoding = 'UTF-8';
Замененные участки кода я закомментировал.
 

alekciy

Новичок
Я тоже так думаю, а учитывая, что iconv входит в ядро PHP (или это не так?), то подменить его мне не чем
По сути PHP обвертка над кучей сишных либ и в этом смысле нет, iconv в "ядро" не входит. Используется установленная в системе iconv.
 
Сверху