QueryString искажен после URLDecode

Другая неудачная практика может вызвать эту проблему, которая еще не указана.

См. этот фрагмент кода:


Все в порядке, верно?

Что делать, если «a_important_file.php»:



 ----------This is the end of the an_important_file-------------------

Это не сработает? Почему? Потому что уже создана новая строка.

Теперь, хотя это не общий сценарий, что, если вы используете структуру MVC, которая загружает большое количество файлов перед передачей данных на ваш контроллер? Это не необычный сценарий. Будьте готовы к этому.

Из PSR-2 2.2:


  • Все файлы PHP ДОЛЖНЫ использовать Unix LF (linefeed) line ending .
  • Все файлы PHP ДОЛЖНЫ заканчиваться на single blank line.
  • Тег закрытия?> ДОЛЖЕН быть omitted из файлов, содержащих only php

Поверьте, следующие стандарты могут сэкономить вам много часов из вашей жизни:)

15
задан pdavis 3 October 2008 в 17:45
поделиться

8 ответов

Вы могли вручную заменить значение (argument.Replace(' ', '+')) или консультироваться HttpRequest.ServerVariables["QUERY_STRING"] (еще лучше HttpRequest. URL. Запрос) и синтаксический анализ это самостоятельно.

необходимо однако попытаться решить проблему, где URL дан; знак "плюс" должен быть закодирован как "%2B" в URL, потому что плюс иначе представляет пространство.

, Если бы Вы не управляете входящими URL, первая опция была бы предпочтена, поскольку Вы избегаете большинства ошибок этот путь.

11
ответ дан Troels Thomsen 3 October 2008 в 17:45
поделиться

System.Web.HttpUtility.UrlEncode(yourString) добьется цели.

1
ответ дан henriksen 3 October 2008 в 17:45
поделиться

Ну, очевидно, у Вас должна быть строка Base64 URLEncoded прежде, чем отправить его на сервер.
, Если бы Вы не можете выполнить это, я предложил бы просто заменить любые встроенные пробелы назад к +; с тех пор b64 строки, как предполагается, не имеют пробелы, это - законная тактика...

1
ответ дан AviD 3 October 2008 в 17:45
поделиться

Как быстрый взлом Вы могли заменить пространство плюс символ перед base64-декодированием.

1
ответ дан Alexander 3 October 2008 в 17:45
поделиться

Я ни в коем случае не разработчик C#, но похоже, что Вы должны к URL ЗАКОДИРОВАТЬ свою строку Base64 прежде, чем отправить его как URL.

0
ответ дан Ryan White 3 October 2008 в 17:45
поделиться

Если Вы URLEncode строка прежде, чем добавить его к URL, у Вас не будет ни одной из тех проблем (автоматический URLDecode возвратит его исходному состоянию).

1
ответ дан Nir 3 October 2008 в 17:45
поделиться

Предложенное решение:

Request.QueryString["VLTrap"].Replace(" ", "+");

Должен работать просто великолепно. Что касается Вашего беспокойства:

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

Это легко облегчить чтение о base64. Единственное не алфавитно-цифровые символы, которые законны в современном base64, "/", "+" и "=" (который только используется для дополнения).

Из тех, "+" единственный, который имеет особое значение как завершенное представление в URL. В то время как другие два имеют особое значение в URL (разделитель пути и разделитель строки запроса), они не должны создавать проблему.

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

14
ответ дан Tim Farley 3 October 2008 в 17:45
поделиться

Вы не можете только предположить, что пространство +, и замените его?

Request.QueryString["VLTrap"].Replace(" ", "+");

;)

0
ответ дан Jason Bunting 3 October 2008 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: