Проблема с кодировкой? - PullRequest
       17

Проблема с кодировкой?

0 голосов
/ 16 сентября 2010

Я думаю, что у меня проблема с кодировкой 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-адресов, поскольку они превратят это во что-то еще?!

Спасибовсе для любой помощи.

Ответы [ 3 ]

2 голосов
/ 16 сентября 2010

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

Используйте функцию encodeURIComponent для экранирования значений для URL:

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

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

2 голосов
/ 16 сентября 2010

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

0 голосов
/ 16 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...