Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

12.09.2009, 13:27
|
|
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
Провел на форуме: 1284900
Репутация:
399
|
|
Сообщение от KaMiKadZe
вот такую бредятину:
RњRµR¶RґSѓ_RЅRµR±RѕRј_Ryo_R·RµRјR»R R№
Прогнал эту строку через кучу всевозможных кодировок, и результат отрицательный.
Так что скорее всего проблема где-то в коде...
Попробуйте испытать это дела на файлах:
а.jpg
б.jpg
я.jpg
(можно и без расширения) И посмотрите на HEX коды...
|
|
|

12.09.2009, 13:34
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
UTF-8 пробовал сразу же как заметил проблему не помогло.
Сейчас остальное попробовал, только некоторые символы поменялись
например KOI8_R выдал R‘S‹R»Rѕ_Ryo_RїSЂRѕS?R»Rѕ
Сообщение от Gray_Wolf
Прогнал эту строку через кучу всевозможных кодировок, и результат отрицательный.
Так что скорее всего проблема где-то в коде...
Попробуйте испытать это дела на файлах:
а.jpg
б.jpg
я.jpg
(можно и без расширения) И посмотрите на HEX коды...
a.mp3 - ./files/R°.mp3
я.mp3 - ./files/SЏ.mp3
В коде нет проблем, до этого стоял обычный загрузчик и обрабатывал как русские так и англ названия на ура, так же из mp3 берутся id тэги и с ними все отлично, так же если переименовать файл то он воспроизводится через flash player следовательно файл не бьется!
UPDATE:
Опа решил проблему, только я в шоке =)
PHP код:
$_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']);
Не работало!
PHP код:
$_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']);
$_FILES['Filedata']['name'] = iconv('WINDOWS-1251', 'UTF-8', $_FILES['Filedata']['name']);
$_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']);
Заработало
Не понимаю логики 
Последний раз редактировалось KaMiKadZe; 12.09.2009 в 13:46..
|
|
|

12.09.2009, 13:50
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
Сообщение от KaMiKadZe
UTF-8 пробовал сразу же как заметил проблему не помогло.
Сейчас остальное попробовал, только некоторые символы поменялись
например KOI8_R выдал R‘S‹R»Rѕ_Ryo_RїSЂRѕS?R»Rѕ
a.mp3 - ./files/R°.mp3
я.mp3 - ./files/SЏ.mp3
В коде нет проблем, до этого стоял обычный загрузчик и обрабатывал как русские так и англ названия на ура, так же из mp3 берутся id тэги и с ними все отлично, так же если переименовать файл то он воспроизводится через flash player следовательно файл не бьется!
UPDATE:
Опа решил проблему, только я в шоке =)
PHP код:
$_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']);
Не работало!
PHP код:
$_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']);
$_FILES['Filedata']['name'] = iconv('WINDOWS-1251', 'UTF-8', $_FILES['Filedata']['name']);
$_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']);
Заработало
Не понимаю логики 
Ты может принятое декодировал.... а вывод на страницу в cp1251? может оно обратно в утф перевело
|
|
|

12.09.2009, 13:54
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
Да и я уже как неделю усвоил перед тем как работать с данными принятыми по ajax нужно их сразу же переводить в windows-1251, иначе после работы с ними уже не переведешь и будут каракули навсегда.
На страницу ничего не выводится, сразу в базу идет, а база cp1251_general_ci да и названия файлов перед тем как идти в базу транслируются (Было-стало в Bilo-stalo)и удаляются пробел,&,'," и прочие знаки которые могут помешать отдать файл через браузер.
|
|
|

12.09.2009, 15:17
|
|
Познающий
Регистрация: 20.02.2008
Сообщений: 82
Провел на форуме: 107625
Репутация:
2
|
|
Народ, вопрос наверное не из простых..
дан текстовой файл (юникс утф8)
1|текст1|текст2|текст3
2|текст1|текст2
\
текст3
\
текст4|текст5
3|текст1|текст2|текст3
суть вот в чём: надо каждую строчку этого файла занести в массив. Думал юзать file(), да есть тут одна особенность: обратите внимание на символ '\' в коде, а вернее на комбинацию 'перевод строки' + '\' + перевод строки, так вот, надо эту комбинацию учитывать как просто символ в контенте "текст1" или "текст2" и т.п. и не использовать их как команду для разбивки текста в массивы... .т.е. в итоге, как видно, у нас должно быть три значение в массиве:
2|текст1|текст2
\
текст3
\
текст4|текст5
Надеюсь, понятно обьяснил)) Или всё придётся preg_replace'ом заменить их сначала на что-то отличное от перевода строки, а уж потом юзать file()???
|
|
|

12.09.2009, 15:30
|
|
Познающий
Регистрация: 20.02.2008
Сообщений: 82
Провел на форуме: 107625
Репутация:
2
|
|
ааа, всё, нашёл preg_split))))))
|
|
|

12.09.2009, 15:37
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
PHP код:
<?php
$file = 'file.txt';
$file = file($file);
$i = 1;
foreach ($file as $line)
{
if (substr($line, 0, 1) == $i)
{
$array[] = $line;
$i++;
}
else
{
$array[count($array) - 1] .= $line;
}
}
print_r($array);
?>
Без использования регулярок 
Выведет:
Код:
Array
(
[0] => 1|текст1|текст2|текст3
[1] => 2|текст1|текст2
\
текст3
\
текст4|текст5
[2] => 3|текст1|текст2|текст3
)
|
|
|

12.09.2009, 18:27
|
|
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме: 482261
Репутация:
58
|
|
Сообщение от FireFenix
PHP код:
$name = iconv('UTF-8', 'WINDOWS-1251', $_FILE);
$name = iconv('KOI8_R', 'WINDOWS-1251', $_FILE);
$name = iconv('KOI8_U', 'WINDOWS-1251', $_FILE);
имею мнение, что данный код сработает ТОЛЬКО в одном случае, что собственно и было видно следующих постах.
только при
PHP код:
$name = iconv('KOI8_U', 'WINDOWS-1251', $_FILE);
т.к. иконв возвращает только в одном случае если входящая кодировка указана верно. поэтому выше представленный код НЕ верен. и имеет место быть только в таком виде:
PHP код:
$name['UTF'] = iconv('UTF-8', 'WINDOWS-1251', $_FILE);
$name['KOI8R'] = iconv('KOI8_R', 'WINDOWS-1251', $_FILE);
$name['KOI8U'] = iconv('KOI8_U', 'WINDOWS-1251', $_FILE);
и после удалить все элементы массива которые пусты.
останется только ОДИН элемент массива в ключе которого будет кодировка текста
|
|
|

12.09.2009, 18:45
|
|
Участник форума
Регистрация: 24.02.2006
Сообщений: 206
Провел на форуме: 2735257
Репутация:
103
|
|
RedBull@12,
Эм...Вообще-то тот код был наводкой =)
Поменять имя переменной куда ложим результат дело пары секунд, да и зачем делать ложить в массив, а потом еще удалять пустые элементы когда достаточно просто проверить все варианты и найти рабочий ?
|
|
|

12.09.2009, 18:56
|
|
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме: 482261
Репутация:
58
|
|
Сообщение от KaMiKadZe
RedBull@12,
Эм...Вообще-то тот код был наводкой =)
Поменять имя переменной куда ложим результат дело пары секунд, да и зачем делать ложить в массив, а потом еще удалять пустые элементы когда достаточно просто проверить все варианты и найти рабочий ?
код представленный принципиально не верный, ибо он верен только в одном случае.
а на сколько "дешевле" проверить все варианты допустим если будет гораздо больше. а во-вторых зачем проверять чем-то когда 2 функции вернут нужный результат. и я сказал именно об особенности функции iconv. о то что если входящая кодировка указана не верно то вернет пустой результат, и исправил приведенный код, а не показал как правильно проверять кодировку.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|