И опять iconv(): Detected an illegal character in input string in

clgs

Новичок
Добрый день. Второй день не могу решить проблему. Помогите кто чем может =)
PHP:
<?
ini_set('display_errors',1);
ini_set('error_reporting',E_ALL);
$str =  'привеит ² привет';
setlocale(LC_ALL, 'ru_RU.utf8');
var_dump(setlocale(LC_ALL, 0));echo '<br>';
var_dump((bool)mb_detect_encoding($str, 'UTF-8', true));echo '<br>';
var_dump(iconv('UTF-8', 'cp1251//IGNORE', $str));
?>
string(10) "ru_RU.utf8"
bool(true)

Notice: iconv(): Detected an illegal character in input string in /iconv.php on line 8
bool(false)
iconv
iconv support enabled
iconv implementation glibc
iconv library version 2.19

Directive Local Value Master Value
iconv.input_encoding ISO-8859-1 ISO-8859-1
iconv.internal_encoding ISO-8859-1 ISO-8859-1
iconv.output_encoding ISO-8859-1 ISO-8859-1
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
~# iconv -V
iconv (Ubuntu EGLIBC 2.19-0ubuntu6.14) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Ulrich Drepper.
# php -v
PHP 5.5.9-1ubuntu4.23 (cli) (built: Feb 8 2018 21:59:47)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
# locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
ru_RU
ru_RU.cp1251
ru_RU.iso88595
ru_RU.utf8
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Для начала стоит убрать setlocale - вы наступаете на ноги другим реквестам, работающим в этом же воркере.
Во-вторых, надо убрать mb_detect_encoding - никогда ею не пользуйтесь, если не хотите проблем.
А теперь внятно опишите вашу проблему.
 

AnrDaemon

Продвинутый новичок
А, да, перед всем этим заменить "<?" на "<?php" и больше так не ошибаться.
 

clgs

Новичок
Для начала стоит убрать setlocale - вы наступаете на ноги другим реквестам, работающим в этом же воркере.
Во-вторых, надо убрать mb_detect_encoding - никогда ею не пользуйтесь, если не хотите проблем.
А теперь внятно опишите вашу проблему.
PHP:
<?
ini_set('display_errors',1);
ini_set('error_reporting',E_ALL);
$str =  'привеит ² привет';
var_dump(iconv('UTF-8', 'CP1251//IGNORE', $str));echo '<br>';
?>
Notice: iconv(): Detected an illegal character in input string in /iconv.php on line 5
bool(false)
 

clgs

Новичок
Сам файл в какой кодировке?
Я думал на этот вопрос будет ответ var_dump((bool)mb_detect_encoding($str, 'UTF-8', true)); // true
Соответственно сам файл в UTF8, иначе бы было бы false.
А вообще проблема воспроизводится до 5.6.9, начиная с 5.6.10 проблемы нет.

А это тут при чём?
При том же причем и "заменить "<?" на "<?php""
 

AnrDaemon

Продвинутый новичок

clgs

Новичок
А кого-то волнует, что там было в отходах жизненного цикла программного обеспечения? Актуальные версии http://php.net/supported-versions
И? Предлагаете весь проект переписать? Если изначально не было что сказать, то не надо было вообще писать. Или вы таким образом крутите счетчик сообщений чтобы казаться умнее?
 

fixxxer

К.О.
Партнер клуба
Если проблема решается переходом с музейной версии PHP на поддерживаемую, именно так и следует ее решить.

Для перехода с php 5.5 на 5.6 переписывать не надо ничего, все заработает как есть.
 

clgs

Новичок
Только что перешли с 5.3 на 5.5. Не всё запустилось.
Хотелось бы попробовать решить без перехода.
 

fixxxer

К.О.
Партнер клуба
@clgs, я ничего не говорил о проблемах перехода с 5.3 на 5.5. Такой переход действительно может быть непростым, прежде всего в связи с удалением call-time pass-by-reference, но есть и другие нюансы.

Я говорил о проблемах перехода с 5.5 на 5.6, а точнее об отсутствии таковых. Единственное, что может понадобиться - это заглушить ошибки уровня E_DEPRECATED.
 
  • Like
Реакции: clgs

grigori

( ͡° ͜ʖ ͡°)
Команда форума
@clgs, в мире ситуация такая, что длительная поддержка старых версий софта бывает только очень платной, за много тысяч долларов.
В web ни у кого нет long-term support - здесь модель "release fast, release often"

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

В глобальном масштабе это обеспечивает преимущество: php развивается заметно быстрее, чем java и python, и без нагибания всех какой-то компанией под себя, как в ноде и mysql.
Впрочем, php при этом ограничен server-side web dev, никаких нейросетей и нативных аппликух под андроид :)
 
Последнее редактирование:

clgs

Новичок
почему вы не отвечаете на мои ответы? (С) ))))

у него просто еще срабатывает подростковая агрессия на учительские формулировки
Особенно интересно слушать когда говорят сделай то сделай другое, а потом предлагают обновится. Зачем такое не к чему не приводящее вступление? "Я говорю чтобы говорить"?)
 
Сверху