[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите победить Оперу
DEN 007
Скрипт обрабатывает примерно вот такой простенький запрос
http://lol/del.php?f=Снимок-1341727076.png&h=bda0f3fb01714205fc158b589527ffca

Во всех браузерах работает нормально в опере не работает точнее неправильно работает в коде написано место где
<?php

/**
*
@author den007
*
@copyright 2012
*/


// начальные и конечные добавления для хешей для удаления файлов
$hash0 = 'lol';
$hash1 = 'lol';
// Путь к файлу
$filepath = dirName(__FILE__).'/lol/';
$filename = iconv(mb_detect_encoding($_GET['f'], 'auto'), 'UTF-8', $_GET['f']);

// html
$html0 = <<<HTML
HTML;


$html1 = <<<HTML
HTML;



// Дальше код
if(isset($filename) and isset($_GET['h'])) {
preg_match("#.*-([0-9]+)\.[a-zA-Z]+$#i", $filename, $result_name);
$file_hash = md5($hash0.$result_name[1].$hash1);
if($file_hash == $_GET['h']) {
if(file_exists($filepath.$filename)) {
// Удаляем оригинал и превью
unlink($filepath.$filename);
unlink($filepath.'thumb-'.$filename);
echo $html0.'Изображение успешно удалено!'.$html11;
} else {
echo $html0.'Изображение удалено ранее!'.$html1;
}

}
else {
header('Location: http://lol/'); ////////////Опера перенаправляет сюда, в смысле переходим сюда
}


}
else {
header('Location: http://lol/');
}




Спустя 4 минуты, 3 секунды (8.07.2012 - 09:05) redreem написал(а):
посмотри что приходит в $_GET в разных браузерах. print_r($_GET);
при чем тут опера вообще, если речь идет о php-скрипте? если дело в браузере - выкладывай html+js, а не php-код.

Спустя 3 минуты, 27 секунд (8.07.2012 - 09:09) DEN 007 написал(а):
redreem, да я смотрел уже и кодировку проверял, например опера вот эту переменную присылает в

UTF-8 f=Снимок-1341727076.png а эту
ASCII h=bda0f3fb01714205fc158b589527ffca

я допилил год вот этим
$filename = iconv(mb_detect_encoding($_GET['f'], 'auto'), 'UTF-8', $_GET['f']);

результат 0

Спустя 7 минут, 31 секунда (8.07.2012 - 09:16) redreem написал(а):
Цитата
ASCII h=bda0f3fb01714205fc158b589527ffca


1. с чего ты взял что строка h=... в ASCII? там одна латинница и цифры. она с таким же успехом может быть и в uft-8.
2. mb_detect_encoding - довольно кривая вещь. не советую ей пользоваться.
3. покажи форму отправки (html), тогда может что-то проясниться.
4. и вот еще какая фигня: если у тебя в гете могут приходить русские символы, то надо предварительно заменять их escape-последовательностью.

Спустя 3 минуты, 33 секунды (8.07.2012 - 09:20) redreem написал(а):
т.е. еще в браузере, до отправки, нужно имя файла прогонять в js через encodeURI() или encodeURIComponent(), а в php преобразовывать обратно, используя urldecode()

Спустя 4 минуты, 13 секунд (8.07.2012 - 09:24) DEN 007 написал(а):
браузер по идее сам должен из адресной строки кодировать... а опера это делает прямо на глазах

Спустя 26 минут, 11 секунд (8.07.2012 - 09:50) redreem написал(а):
перед передачей скрипту гет-параметров, прогоняй их через encode, если они могут содержать невалидные или служебные для адресной строки символы.

Спустя 36 минут, 34 секунды (8.07.2012 - 10:27) DEN 007 написал(а):
Почему опера не кодирует символы в адресной строке мне не понятно, пришлось сделать очередной костыль)
ссылку просто сокращаю и она через Location: летит опере уже закодированая)

но вопрос остается открытым

Спустя 14 минут, 32 секунды (8.07.2012 - 10:41) killer8080 написал(а):
DEN 007
настройки/расширенные/сеть/галочка "кодировать международные веб-адреса в UTF-8"
установлена?

Спустя 4 минуты, 2 секунды (8.07.2012 - 10:45) DEN 007 написал(а):
killer8080
Да стоит, там везде дефолтные настройки я сбрасывал переустанавливал, думал проблема только у меня.

Спустя 6 минут, 52 секунды (8.07.2012 - 10:52) killer8080 написал(а):
DEN 007
пробовал тестить в опере такой код
echo ' <a href="?f=Снимок-1341727076.png">link</a>';
echo $_SERVER['REQUEST_URI'];
echo '<pre>';
print_r($_GET);

все нормально, ничего не искажается. Какая версия оперы?

Спустя 16 минут, 42 секунды (8.07.2012 - 11:09) DEN 007 написал(а):
Цитата (killer8080 @ 8.07.2012 - 07:52)
все нормально, ничего не искажается. Какая версия оперы?

killer8080
побывал тестить, читай 3 сообщение, но дело все в том, что искажается, но в массиве как бы все нормально, но хеш уже не сходится (смотри код)
а вот как оно выглядит запустил твой код.
опера 12.00 последняя, опера нехт 12.50 internal тоже самое
первый скрин перешел по ссылке:
user posted image
второй ввел в адресной строке и нажал ентер:
user posted image

Спустя 33 минуты, 35 секунд (8.07.2012 - 11:42) redreem написал(а):
я честно говоря смутно понимаю уже что ты хочешь добиться. вот выполни-ка у себя это:

файл url.php, в корне сайта, в кодировке utf-8 без BOM:

<?php

//php-файл в utf-8


if (isset($_GET['h'])) {

$f = $_GET['f'];
$h = $_GET['h'];

} else {

$f = '';
$h = '';

}

header("Content-type: text/html; charset=utf-8");

?>


<!doctype html>
<
html>
<
head>
<
meta charset="utf-8">
</
head>

<
body>

<
a href="/url.php?f=файл такой файл.png&&h=bda0f3fb01714205fc158b589527ffca">Отправить гет-запрос</a>
<
br>
<
br>
Результаты $_GET:
<
br>
f = <?php echo $f ?>
<br>
h = <?php echo $h ?>

</body>

</
html>


нажми на Отправить гет-запрос и напиши что выведет на экран.

Спустя 5 часов, 13 минут, 13 секунд (8.07.2012 - 16:55) DEN 007 написал(а):
redreem
Ну а теперь сами попробуйте
http://yalol.tk/1.php
что внутри
http://yalol.tk/1.phps
этот код работает в о всех кроме оперы и почему то ие

а вот файлы которые сохранены и работают с cp1251
работают в ие и опере не работают в отличных от них.
http://yalol.tk/1.php
что внутри
http://yalol.tk/1.phps


...как это победить?

Спустя 11 минут, 44 секунды (8.07.2012 - 17:07) redreem написал(а):
и? у меня в обоих кодировках пишет:

Сравним данные: Хеши равны

Может у тебя где-то серваку еще принудительно кодировка прописана, в htaccess например.

Спустя 2 часа, 17 минут, 25 секунд (8.07.2012 - 19:25) killer8080 написал(а):
Цитата (redreem @ 8.07.2012 - 17:07)
и? у меня в обоих кодировках пишет:

аналогично

Спустя 17 минут, 53 секунды (8.07.2012 - 19:43) DEN 007 написал(а):
redreem
Вот смотри если ты не понял о чем это я видюха так сказать
http://yalol.tk/lol.html

Спустя 7 дней, 26 минут, 16 секунд (15.07.2012 - 20:09) DEN 007 написал(а):
никто меня так и не понял((

Спустя 11 часов, 27 минут, 7 секунд (16.07.2012 - 07:36) redreem написал(а):
я тебе уже писал выше

Цитата
Может у тебя где-то серваку еще принудительно кодировка прописана, в htaccess например.


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

проверь все шаги, которые могут повлиять на кодировку:

1. кодировка php-файла
2. header, отправляемый сервером
3. сам сервер в какой кодировке отдает (htacces, php.ini и прочие где может затесаться установка кодировки на сервере).
4. установка метатега для кодирвки в html

скорее всего либо в пункте 1, либо в 3 засада.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.