2010-09-16 3 views
0

Я думаю, что у меня проблема с кодировкой URL. Мне нужно открыть окно с помощью Javascript и передать ему запрос SQL Select. Так что я сделал это:Ошибка кодирования?

window.open('view_query.php?sql_query=' + query + '&db_name=' + db_name); 

Это работает для меня, но у меня есть запрос, который нарушает это:

SELECT a FROM table WHERE field like '%adhoc%' 

Теперь, когда откроется новое окно, и напечатать запрос, полученный от URL GET переменные выглядит следующим образом:

SELECT a FROM table WHERE field like '�hoc%' 

Обратите внимание на битой %ad превратились в непризнанный характер! Зачем?

Я пробовал решить это с кодировкой URL, но так как мне нужен символ %, я не могу использовать много кодеров URL, так как они превратят это в нечто другое ?!

Спасибо всем за любую помощь.

+0

Думаю, я понял! Я использовал escape(), и теперь он работает нормально! Может ли кто-нибудь подтвердить это, не вызовет никаких проблем с другими SQL-запросами, которые имеют странные символы - было бы легче узнать! – Abs

+1

побег не годится. Если это должно быть на стороне JS, 'encodeURIComponent()' - это то, что вы ищете. Однако, делая кодирование на стороне сервера намного лучше –

+0

, вы также знаете, что передача запросов с помощью запросов GET представляет собой огромный риск для безопасности? Я предполагаю, что это так, и это для некоторого инструмента администрирования mySQL, просто чтобы убедиться ... –

ответ

2

% символ используется для кодирования символов в URL, используя код символа. Последовательность %ad означает символ с шестнадцатеричным кодом символа 0xAD или десятичное 173.

Используйте функцию encodeURIComponent, чтобы избежать значения для URL:

window.open('view_query.php?sql_query=' + encodeURIComponent(query) + '&db_name=' + encodeURIComponent(db_name)); 

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

+0

@Gufa - этот скрипт будет запущен внутренне, и если мы хотим отправить запрос на удаление нашей базы данных, мы должны быть застрелены! Считаете ли вы, что лучше использовать 'escape' или' encodeURIComponent' любые преимущества, о которых вы знаете? – Abs

+0

@Abs 'escape()' не будет преобразовывать знак '+', который даст вам проблемы. Используйте 'encodeURIcomponent' –

+1

' encodeURIComponent' - это UTF-8 и URL-кодирование. 'escape' - это случайный нестандартный JavaScript-код, который выглядит как URL-кодирование, но это не так. Не используйте его. – bobince

2

Кодировать запрос, используя http://pl.php.net/urlencode. Затем его расшифровать с помощью http://pl.php.net/urldecode (при необходимости, PHP должен сделать это автоматически)

+0

Это проблема с Javascript. :) – Abs

+0

@ Нет, это не так. Ваш запрос не создан в JavaScript, не так ли? –

+0

С меткой PHP, поэтому я верю, что у вас есть PHP тоже :) –

0

Это из-за кодирования URL - вам нужно позвонить
window.open('view_query.php?sql_query='+encodeURICompoent(query)+'&db_name...);
, а затем на стороне PHP $query = rawurldecode($_GET['sql_query']);

+1

Не должно ли php автоматически декодировать значения, которые он получает в пути? – ZeissS

Смежные вопросы