aftamat4ik

Рейтинг
55
Регистрация
05.01.2012
Интересы
php + Drupal
программист недосамоучка

В общем поменял на это:

$get = iconv('UTF-8','windows-1251',$_GET['file']);

И вы не поверите! Произошло чудо. Все 3 броузера наконец то сошлись на 1 - в них музыка не играет!))

гет запрос и так в утф передается, я его 2 раза в 1 и ту-же кодировку переводил - это было не правильно, но косяков не вызывало, что естественно. Теперь же я возвратил ссылку в win-1251,ясное дело она не заиграет)) Может наоборот о_0 хром как раз в cp-1251 урл читает а 2 остальных в утф? Хотя нет. под хромом же тоже не воспроизводит...

И вообще почему не эскейп! строка вида /audio/Дом Ветров/ в хроме выглядит так: /audio/Дом%20Ветров/ Ну я какбэ знаю что %20 - это код пробела(в escape последовательности), но в файрфоксе и опере ссылка без этого символа,а в хроме с ним. Как уже говорилось ссылка не подвергалась php urlencode(); Хотя проблемма не в %20, потому что из папки Катарсис тоже не играет хД

---------- Добавлено 12.06.2012 в 22:15 ----------

aftamat4ik:
cp1251 и windows-1251 это одно и тоже.

Знаю. и к стати правильно писать cp-1251, именно через тире( на хабре вчера прочел де-то) и utf-8, тоже через тире:)

---------- Добавлено 12.06.2012 в 22:27 ----------

siv1987:
То есть эту обработку применяете ко всем запросам? А что будет если один например идет в windows-1251, другой в utf-8? Как вариант поменяйте их местами.

я же говорю - ВСЕ аякс запросы то есть Get и Post кодируются(сразу) в утф-8, хочешь ты этого или нет. То есть здесь почему то все броузеры(даже о ,нет интернет эксплорер!) имеют единое мнение. Можно передавать строку хоть в ср-1251 она все равно в утф будет преобразована, и на обработчике придется писать так:

$get = iconv('UTF-8','windows-1251',$_GET['file']);

как к стати у меня и написано, но у меня сайт на утф-8 сделан, а значит это без надобности.

Если требуется передать данные в запросе какой-либо другой(специальной) кодировкой надо юзать это:

header('Content-type: text/html; charset=ср-1251');

У меня таких строк ни в 1 скрипте никогда не появится)

zhitov:
Не бывает неполноценных переходов... :) - они или есть, или их нет.
Ваш js-проигрыватель запрашивает файл у сервера (и получает его - вполне "полноценно") => хтакесс отдает не сам файл, а файл urlencode.php, который, в свою очередь делает что хочет...

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

---------- Добавлено 12.06.2012 в 22:00 ----------

siv1987:

...cp1251...

Аха! так щщас. То есть надо попробовать переделать урл в cp-1251. К стати я это уже делал) вроде не прокает, щас еще раз...

А в опере в которой играет cp1251

При выводе ссылки используется код:

$url = iconv('windows-1251','UTF-8',$arr['url']);

это вроде как преобразовывает из вин в утф, или нет?)

= к тому же в файле прописан header('Content-type: text/html; charset=utf-8');

хотя по умолчанию все аякс запросы в утф идут...

Я же говорю - как только не вертел...

Я вообще не знаю с чем связан тот факт что в опере таки играет...

Согласившись с вашим предоположением таки наваял в файле urlencode.php

$get = iconv('windows-1251','UTF-8',$_GET['file']);

Не играет. хоть тресни зарраза под хромом не играет.(надо заметить на денвере везде нормально играет и тут rotmaister.narod2.ru тоже. Последнее - это собственно проигрыватель который я наваял. Вывод - ошиппка не в яваскрипте...))

______________

к слову играет там не везде, и не всегда. я каждые 5 минут что-то правлю. Играют треки исполнителей, например тут можно послушать:http://aftamat4ik.ru/unt.php#authorname=Грот.

На главной нельзя - там у меня другой скрипт за все отвечает,и там ничего не подправлено, пока...

И снова лол.

^audio/(.+\.mp3)$

Не) Теперь только когда фывфыв пишу музыка не играет, а так все то-же)) Хром упертый. Я ведь так его любил за то что он css3 тянет лучше всех... Ситуация повторяется - Firefox играет, хром нет. К сожалению гугл хром настолько пропиарен даже тнт и 1 каналом, что на нем даже старушки теперь сидят... Не. Уж лучше я 1000 записей руками вдолблю, чем потеряю 1000 посетителей.

можете просмотреть сам сайт тут(пока во всяком случае, я его на другом домене буду держать, а этот под блог личный наверное отведу....):http://aftamat4ik.ru/unt.php

______________

ладно щас еще поковыряю....

Да) Идея отличная, но. В общем в хтакесс написал так(у меня там еще картинки в jpg формате)

RewriteRule ^audio/(.mp3)$ urlencode.php?file=$1 [L]

в файлеге urlencode.php так:

$get=urldecode($_GET['file']);

header("Location: $get");
exit();

ровно ничего не поменяло.

Тогда я решил проверить - пашет ли данный метод. Файл urlencode.php изменил так:

$get=urldecode($_GET['file']);

header("Location: фывфвфыв");
exit();

Все как было - По старому. Музыка играет под файрфоксом и не играет под хромом)

Вообще здравый метод, но он применим, если выполняется полноценный клик по ссылке! То есть Полноценный. У меня на ссылке висит javascript обработчик. там есть return false; Вот так вот) То есть перехода не происходит => хтакесс не задействован.

Но способ очень полезный, надо запомнить, благодарю. Думаю не раз мне еще поможет, но только не в этом проекте. Тут все не так как на обычных сайтах, к сожалению)

_____________________________

Кривая подсветка синтаксиса....

Ну тоогда попробуй так:

<div class="itemlistframe">

<div class="itemlistinframe1">

<a class='test'>

<div class="iverticalcell">

<?php echo $this->item->id;?>

</div>

</a>

</div>

и в стили напиши например так:

a.test:visited{

opacity:0.8;

}

попробуй, я фиг его знает как там, но может прокатит))

Так у тебя что только 2 файла что-ли о_0) аа ээ ну типа подробная информация о квартире где показывается?)

Я думал типа например тыкаешь по ссылке "Копия квартира в центре недорого" - окно обновляется, загружается php файл в котором вся подробная инфа о квартире. Или у тебя не так?) А тогда как о_0 ну просто я бы так сделал хД

О НЕТ ЭТО же К2!!!! ААА, щас вкурю))

Бэлин я думал ты руками писал.... К2 осложняет задачку раз в 100) вот я даже сам не знаю куда теперь все это пихать) нее, не знаю.

Под джумлой я сам много чего ковал на к2, но просто такой задачи себе не ставил))

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

А что a:visited уже не пашет?

К стати:

И второй вопрос: возможно ли сделать ссылкой не только текст в диве, а весь див (может прозрачной картинкой)?

Можно, я даже делал вот смотри внизу в футере http://www.zfbsau.ru/

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

такая конструкция канает:

<a style="display:block;"><div></div></a>

_____________________________________________

Я в этом самом универе учусь, я сделал им сайт(отличный имхо), и они не хотят мне ставить зачеты! Адалт выложу!)

Оно у тебя на аяксе работает? если нет - то фиг его знает как....

О! Юзай кукиз! точно. В кукиз прописывай данные по элементам которые просмотрены.

А потом через javascriptом считывай куки и конструкцией типа $(имя дива из куков).css("background-color","#121212"); это jquery.

к стати у jquery даже плагин для работы с кукиз есть cookie и называется.

пользователь переходит по ссылке из дива, заносим это в куки через php, там есть функции.

если каждому куку присваивать название от 0 до число просмотров, то данные можно считать так:

var cc = 0;

while($.cookie(cc.toString())){

$($.cookie(cc.toString()).css("background-color","#121212");

сс++

}

то есть читаются куки от 1 до сколько там просмотрел пользователь и ко всем стиль применяется.

У меня работает, не барахлит и не пыхтит, но на денвере. На серваке проблемы с кодировкой в русскоязычных ссылках.

---------- Добавлено 12.06.2012 в 14:55 ----------

Даже подробнее напишу.

В файле который отображает список квартир в секции

$(document).ready(function(....

делаете так:

var cc = 0;

while($.cookie(cc.toString())){

$($.cookie(cc.toString()).css("background-color","#121212");

сс++

}

- то есть если пользователь просмотрев инфу о квартире вернулся на страницу со списком квартир, то изменить стили.

В пхп файле, отвечающем за отображение квартир в секции $(document).ready(function(....

делаете так:

n = 0;

while($.cookie(n)){//зато сердито и работает

n++;

}

$.cookie(n,'тут твой div.itemlistframe+n, наверное...',30);

30- время хранения, в днях. вообще 1 поставьте)

Вы билин не поверите - под файерфоксом ВСЕ! играет о_0 То есть под хромом не играет, а вот под фаерфокс вполне можно послушать музыку. Вопрос - Какого?..😕😕) Так...

Я вообще в осадочном состоянии разлагаюсь на мелкие малекулы моска.

Знач так. Урл песни под firefox(firebug) :

/audio/Катарсис/Воин Света/Катарсис - Вечный Странник.mp3

вот что дает хромиум(тот же урл):

/audio/%D0%94%D0%BE%D0%BC%20%D0%92%D0%B5%D1%82%D1%80%D0%BE%D0%B2/%D0%9A%D0%B8%D1%82%D0%BE%D0%B1%D0%BE%D0%B9/%D0%94%D0%BE%D0%BC%20%D0%92%D0%B5%D1%82%D1%80%D0%BE%D0%B2%20-%20%D0%BE%D0%B3%D0%BE%D0%BD%D1%8C.mp3

такэ. в общем конечно ясно что urlencode и urldecode...

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

Когда страница загружается $(document).ready(бла бла бла...

Выполняется аякс запрос к файлу(который собственно и дает нам список песен)

Предположим в этом файле код:

echo "<li><a href="/audio/песня.mp3l">песня.mp3</a></li> и тут дальше еще много таких-же";

аякс делается примерно так

$.ajax({

//тут урл к файлу и начальные данные

}).done(function(data){//в данный момент data = <li><a href="/audio/песня.mp3l">песня.mp3</a></li>

//после чего

elem = $(data);

$("ul#list").append(elem);//добавляем элемент на страницу

});

Это примитивнейший пример, на самом деле все в разы сложнее, но писать тут 50 страниц я не хочу)

Вопрос: КАК применить javascrit функцию decodeURIComponent(урл) к списку песен, сформированному через аякс метод?)))

То есть если мы напишем

newurl = urlencode($('ul#list li a').attr('href'));

$('ul#list li a').attr('href',newurl);

- это вообще все к чертовой китайской бабушке испортит.

У всех треков на странице становится 1 урл - newurl(тут я не удивляюсь), но оно не играет. вообще не воспроизводит его хром ((

Короче тупик ребята. Кто знает как с этим бороться, напишите пожалуйста)

___________________________________________________

Знаете о чем я мечтаю - вставлять php код в яваскрипт...

bndr:
Это самый оптимальный вариант. Все переделайте в транслит и не будет проблем.

да, я сам так хотел, честно. но беспокоюсь что при расшифровке транслита будут бяки вида ja=йа(надо я)

---------- Добавлено 11.06.2012 в 21:42 ----------

Liave:
и в результате что вы будете делать ? ) я что то не вкурю с каким советом вы согласились )))

Исчу функцию пхп по переименовыванию файлофф. то есть уже нашел - rename. теперь кой чего подправлю, авось сгодится)

---------- Добавлено 11.06.2012 в 22:25 ----------

bndr:
Как это упрощает работу, если у вас УЖЕ проблемы? В место того чтобы сделать все с нормальной базой данных(Куда можно добавить и id, и название, и перевод, и текст и т.д) вы решили все сделать через жопу

Дошло что вы имели в виду, медленно конечно...)) Нет, вы ошибаетесь, проект сделан не на файлах, есть скрипт, который полностью сканирует папку/audio/ и заносит названия всех треков, альбомов и исполнителей в базу данных. Например таблица songs имеет структуру вида: id songname url hits album author

где хитс - число прослушиваний... Урл, при размещении на сайте берется из бд простеньким запросом. После чего отправляется аяксом на страницу. Примерно такой там код:

echo "<li><a href='".$row['url']."'>".$row['title']."</a><li>";

Тут косяков ясное дело вообще нет. косяк у меня оказался в скрипте сканирующем папку с файлами(название совершено секретно + он в папке запаролен хтакессом отдельным хДД). там такой код есть(да да я его написал и теперь правлю хД) $title=substr(дальше вы знаете)

после чего идет запрос такого вида: insert into `songs`(title,url,и прочее) values('".$title."'....."

Вот потому я так и написал выше)) сори за непонимание в самом начале))

Всего: 143