Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / что не нравится функции iconv() и есть-ли какая замена? / 25 сообщений из 46, страница 1 из 2
25.08.2012, 22:01:23
    #37930429
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
Здравствуйте.

На PHP пишу давно, но я можно сказать ламер в нем.
Нарвался на проблему.
Опишу упрощенный алгоритм, с которым уже возникают проблемы со стороны сервера.

Отправляю POST - данные из десктопного приложения multipart-form-data (использую виндовый Msxml2.XMLHTTP - версий от 6.0 - до без версии ).
Кодировка Windows-1251, но перед отправкой делаю операцию NOT (побитную инверсию / поразрядное отрицание) над каждым байтом отправляемых данных.
Разумеется, в .htaccess прописано AddDefaultCharset windows-1251 (данные все равно приходят в UTF-8 (хостинг TimeWeb) ).
на PHP пишу такой г-код (упрощенный вариант):
Код: php
1.
2.
3.
4.
5.
6.
$my_data=stripslashes($_POST['data']);
$my_data=iconv('UTF-8','cp1251',$my_data);
$cnt=strlen($my_data); if ($cnt==0) { print 'error'; exit; }
// далее делаю обратное преобразование NOT
$my_dat='';
for ($i=0; $i<$cnt; $i++) { $my_dat.=chr(256+(~ord(substr($my_data,$i,1)))); }


Строка абсолютно корректно преобразуется к первозданному виду (проверял). На клиенте перед отправкой точно так-же делаю NOT.

Так вот, если сделать $cnt=strlen($my_data) ДО вызова функции iconv() , то размер принятых данных совпадает с отправленными (80 Кбайт).
А после вызова iconv() размер мнее 500 байт.

Примечание: последний символ блока данных после вызова iconv() встречается многократно по тексту (это пробел в оригинале), не помню деталь: включительно в строку или нет.

Просьба подсказать, почему iconv() возвращает короткую строку данных.

Спасибо.
...
Рейтинг: 0 / 0
25.08.2012, 22:16:27
    #37930440
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
aswsРазумеется, в .htaccess прописано AddDefaultCharset windows-1251 (данные все равно приходят в UTF-8 (хостинг TimeWeb)Это указание вебсерверу на человеческий язык переводится примерно так: если не указано иное, сопровождать отдаваемый контент заголовком charset=windows-1251. Таким образом, к кодировкам самих данных он имеет весьма далекое отношение.
...
Рейтинг: 0 / 0
25.08.2012, 22:18:56
    #37930441
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
aswsА после вызова iconv() размер мнее 500 байт.Там кусок реальных данных или сообщение об ошибке? ;-)
...
Рейтинг: 0 / 0
25.08.2012, 22:41:09
    #37930447
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
vkleaswsА после вызова iconv() размер мнее 500 байт.Там кусок реальных данных или сообщение об ошибке? ;-)кусок реальных данных
...
Рейтинг: 0 / 0
25.08.2012, 22:42:19
    #37930449
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
причем правильно преобразованных данных, в исходный формат.
...
Рейтинг: 0 / 0
25.08.2012, 22:44:46
    #37930451
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
aswsпричем правильно преобразованных данных, в исходный формат.получаемых на клиенте уже...
Вся проблема с обрезкой блока - при вызове iconv()
...
Рейтинг: 0 / 0
25.08.2012, 23:44:28
    #37930487
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
Странно это. Прикрепите файликом тестовый пример с реальными данными. Чтоб можно было выполнить на своей машине и увидеть проблему. Версию PHP и платформу укажите.
...
Рейтинг: 0 / 0
26.08.2012, 00:04:33
    #37930492
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
vkle,

Закрытый формат данных и шифрования, не могу привести пример, точно исслюстрирующий проблему.
Как обычно, написал про узкое место, что сам выявил.

Думаю, тут проблема в глюке - преобразование кодировок, незнаю даже, с какой стороны, клиента или сервера.
Сам уже думаю, что глюк со стороны Windows, ибо не привыкать.

Буду менять шифрование, чтобы коды символов оставались в пределах 32-255 кодировки windows-1251.
Только боюсь проблема останется со служебными кодами (13,10,9 и т.д.).
Попробую, отпишусь, если что нарою.
...
Рейтинг: 0 / 0
26.08.2012, 00:09:35
    #37930495
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
asws...
Сам уже думаю, что глюк со стороны Windows, ибо не привыкать.
...
Хотя не исключено, что и со стороны PHP, так как перед отправкой зашифрованный файл локально выглядит в полном порядке.
...
Рейтинг: 0 / 0
26.08.2012, 00:21:27
    #37930501
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
документацию конечно же не читаем.
http://www.php.net/manual/en/function.iconv.php
авторIf you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character and an E_NOTICE is generated.
...
Рейтинг: 0 / 0
26.08.2012, 00:28:12
    #37930504
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
ScareCrowдокументацию конечно же не читаем.
http://www.php.net/manual/en/function.iconv.php
авторIf you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character and an E_NOTICE is generated. Все я читал, этот символ встречается ранее много раз, даже набор символов...,
однако почему-то строка обрывается именно в одном месте, вот это и непонятно.
...
Рейтинг: 0 / 0
26.08.2012, 00:33:50
    #37930506
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
Повторюсь, на клиенте (отправляемые данные) и на сервере (принимаемые данные) имеют одинаковый размер.
Повторюсь - проблема при вызове iconv

Я очень редко задаю вопросы на проф-форумах,
и обычно ответ выглядит так: это глюк используемого средства для работы.
...
Рейтинг: 0 / 0
26.08.2012, 00:39:04
    #37930510
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
Версия PHP 5.2.12
...
Рейтинг: 0 / 0
26.08.2012, 00:44:51
    #37930512
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
Код: php
1.
$my_data=iconv('UTF-8','cp1251//IGNORE',$my_data);


сработает?
...
Рейтинг: 0 / 0
26.08.2012, 00:53:00
    #37930517
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
ScareCrow
Код: php
1.
$my_data=iconv('UTF-8','cp1251//IGNORE',$my_data);


сработает?а смысл? Если хоть один байт будет пропущен - не расшифруется потом...
...
Рейтинг: 0 / 0
26.08.2012, 01:10:50
    #37930528
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
ты трудный.
...
Рейтинг: 0 / 0
26.08.2012, 01:26:29
    #37930531
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
ScareCrowты трудный.я знаю,

со мной избегают общаться технари-попугаи, повтряющие заученные фразы и "правильные мысли", которые им кажутся своими ... ,
для меня абсолютно нет авторитетов , только уважаемые люди (за собственные оригинальные тех.терешения и алгоритмы),

как знаю и то - что делаю все профессионально, даже если лопатой буду копать, иначе сижу на ж... и впадаю в депрессию и запой...
...
Рейтинг: 0 / 0
26.08.2012, 10:11:24
    #37930579
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
aswsБуду менять шифрование, чтобы коды символов оставались в пределах 32-255 кодировки windows-1251.
Только боюсь проблема останется со служебными кодами (13,10,9 и т.д.).Может Base64 использовать? Там эта проблема решена. Только объем передаваемых данных немного больше получается.
...
Рейтинг: 0 / 0
26.08.2012, 11:43:07
    #37930632
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
vkle,

Спасибо.
Вчера забыл об этом, башка уже поздно не работала.
...
Рейтинг: 0 / 0
26.08.2012, 12:15:50
    #37930649
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
Все прекрасно заработало с Base64

iconv() вообще убрал из кода.

Видимо iconv с бинарными данными некорректно работает.
...
Рейтинг: 0 / 0
26.08.2012, 19:27:26
    #37930860
netwind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
aswsВсе прекрасно заработало с Base64

iconv() вообще убрал из кода.

Видимо iconv с бинарными данными некорректно работает.
Почему это некорректно? Просто у одного программиста свое видение правильных данных, а у тебя другое.
...
Рейтинг: 0 / 0
26.08.2012, 19:54:21
    #37930867
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
авторПросто у одного программиста свое видение правильных данных, а у тебя другое.
просто кто то не занет ни что такое UTF-8, ни что такое iconv
...
Рейтинг: 0 / 0
26.08.2012, 23:22:18
    #37930986
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
ScareCrowавторПросто у одного программиста свое видение правильных данных, а у тебя другое.
просто кто то не занет ни что такое UTF-8, ни что такое iconvэто в мою сторону намек что-ли?
UTF-8 я прекрасно понимаю, а вот iconv я действительно не знаю, хотя пользую несколько лет.
Думаю, что глюк в этой функции проявляется в процессе преобразования из UTF-8 в windows-1251
И это вполне может быть, независимо от уровня ваших знаний и опыта. Глюк есть глюк.
Вот пример нарытого мной глюка: /topic/924772&hl=
...
Рейтинг: 0 / 0
26.08.2012, 23:33:26
    #37930995
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
авторUTF-8 я прекрасно понимаю
ну тогда расскажи почему у тебя преобразовагте не проходит.
...
Рейтинг: 0 / 0
26.08.2012, 23:40:10
    #37931005
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
что не нравится функции iconv() и есть-ли какая замена?
ScareCrowавторUTF-8 я прекрасно понимаю
ну тогда расскажи почему у тебя преобразовагте не проходит.Как я могу рассказать, если не знаю внутреннюю реализацию функции iconv ???
Этот вопрос надо разработчикам PHP задавать...
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / что не нравится функции iconv() и есть-ли какая замена? / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]