Я пытаюсь выяснить, почему очищенная строка будет выводиться иначе, чем необработанная строка при кодировании 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)
- Отмененный шедевр Кодзимы - Расследование Тихих Холмов
- Kojima% 27s + Отменен + Шедевр + - + Исследуя + Тихий + Hills
Как это
$title = sanitize("Kojima's Cancelled Masterpiece - Investigating Silent Hills", "str");
echo $title;
echo "<br>";
echo urlencode($title);
Выходы: (который не работает в URL, но очищен)
Функция дезинфекции
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()
?