Я пытаюсь понять, почему дезинфицированная строка будет выводиться иначе, чем недезинфицированная строка при кодировании URL.
Я не знаю, как это называется, но я искал URL-кодирование и очистку и пробовал Google, но не могу найти никакого объяснения.
Я обнаружил это случайно после публикации видео, проблема в том, что я вставляю заголовки в базу данных, извлекаю их и создаю с ними URL.
Пример URL (который не работает из-за проблемы)
localhost/proviin/video/kojima%26%2339%3Bs+cancelled+masterpiece+-+investigating+silent+hills/16
Я сделал тест на одной странице, чтобы проверить, что происходит и поведение, как вы можете видеть ниже.
Каким должен быть результат (но это не очищено):
$title = "Kojima's Cancelled Masterpiece - Investigating Silent Hills";
echo $title;
echo "<br>";
echo urlencode($title);
Выходы: (что будет работать в URL)
- Отмененный шедевр Кодзимы — расследование Silent Hills
- Кодзима%27s+Отменено+Шедевр+-+Расследование+Silent+Hills
Как это
$title = sanitize("Kojima's Cancelled Masterpiece - Investigating Silent Hills", "str");
echo $title;
echo "<br>";
echo urlencode($title);
Выходы: (который не работает в URL-адресе, но дезинфицируется)
Отмененный шедевр Кодзимы — расследование Silent Hills
Кодзима%26%2339%3Bs+Отменено+Шедевр+-+Расследование+Silent+Hills
Функция очистки
function sanitize($item, $type) {
switch ($type) {
case "str":
return filter_var($item, FILTER_SANITIZE_STRING);
break;
case "mail":
return filter_var($item, FILTER_SANITIZE_EMAIL);
break;
case "url":
return filter_var($item, FILTER_SANITIZE_URL);
break;
case "int":
return filter_var($item, FILTER_SANITIZE_NUMBER_INT);
break;
case "float":
return filter_var($item, FILTER_SANITIZE_NUMBER_FLOAT);
break;
default:
return false;
}
}
Насколько я знаю:
Вы дезинфицируете данные перед вставкой в базу данных.
Вы экранируете (htmlspecialchars), когда повторяете
Но почему очищенные строки выводятся по-разному при использовании urlencode()
?
Если это нормальное поведение, то как мне дезинфицировать строки перед их вставкой в таблицу базы данных и использовать их в URL-адресе с urlencode()
?
<a href="DATA_HERE">
, вы сойдете с ума, пытаясь сделать так, чтобы он выглядел правильно для<div>DATA_HERE</div>
- person MonkeyZeus   schedule 23.01.2019