GET переменные с пробелами - они работают, но это правильно или нормально?

У меня есть страница PHP, где я передаю название города через переменную URL/GET города. В настоящее время он передает фактическое название города, даже если оно имеет пробелы (например, .php?city=New York). Затем я беру переменную GET $city и запускаю запрос MySQL в адрес city.name.

Это работает отлично - но у меня всегда было впечатление, что любые переменные, URL/GET или иначе никогда не должны иметь пробелов. Я более чем способен либо заменять пробелы w/подчеркиваниями, либо удалять их, и возвращать их обратно для запроса... и т.д. - но я думал, что сначала попрошу, чтобы пробелы были полностью прекрасными, и это было просто мое суеверие говорит мне иначе.

Ответы

Ответ 1

Пространства в порядке и обычно кодируются с помощью +.

Чтобы быть более безопасным, используйте urlencode() для своих значений, если вручную добавить их к вашим параметрам GET.

echo urlencode('New York'); // New+York

CodePad.

В противном случае, если ваша форма, если вы представляете параметры GET, просто оставьте их такими, как они:)

Затем я беру переменную GET $city и запускаю запрос MySQL в адрес city.name.

Убедитесь, что вы используете подходящий механизм экранирования базы данных, чтобы быть в безопасности от SQL-инъекции.

Ответ 2

Пространство в URL-адресе отлично. Следует обратить внимание на то, когда вы работаете с переменной, взятой извне вашего контроля (переменная URL, Cookies и т.д. И т.д.). Всегда помните, чтобы очистить его, чтобы предотвратить инъекцию sql, XSS и другие вредоносные атаки.

Ответ 3

Это работает отлично, не используя encodeURI() или encodeURIComponent() для параметров с пробелами от Javascript к Php или Python.

echo shell_exec("python test.py \"".$_POST['ytitle']."\" \"".$_POST['yurl']."\"");

Спасибо за примечание от https://stackoverflow.com/users/8712097/tom-aranda Здесь более безопасный код.

system(escapeshellcmd("python GreaseMonkey_Php_Youtube_srt_generator.py ".$_POST['yurl']));