Вы должны разделить свой вопрос на две части:
Нужно ли кодировать символ двойной кавычки в пути URL?
Да, символ кавычки (U + 0022) недопустим простым текстом и должен кодироваться с помощью %22
.
Нужно ли кодировать символ двойной кавычки в значение атрибута HTML?
Это зависит от , как вы объявляете значение атрибута :
По умолчанию SGML требует, чтобы все значения атрибутов были разделены с помощью двойных кавычек (десятичный ASCII 34) или одинарных кавычек (десятичный ASCII 39). Одинарные кавычки могут быть включены в значение атрибута, когда значение ограничено двойными кавычками, и наоборот. Авторы также могут использовать числовые ссылки на символы для представления двойных кавычек ("
) и одинарных кавычек ('
). Для двойных кавычек авторы также могут использовать ссылку на символьную сущность "
.
- Если вы используете символ двойной кавычки для объявления значения атрибута (
attr
=
"
value
"
), затем необходимо закодировать символ кавычки Дувка в объявлении значения атрибута с помощью ссылки на символ ("
, "
или "
).
- Если вы используете символ одинарной кавычки (U + 0027) для объявления значения атрибута (
attr
=
'
value
'
), тогда вам не нужно кодировать символ кавычки. Но это рекомендуется делать.
И поскольку в значении вашего атрибута есть косая черта и двойная кавычка, третий случай (вообще без кавычек) неприменим:
В некоторых случаях авторы могут указывать значение атрибута без кавычек. Значение атрибута может содержать только буквы (a-z и A-Z), цифры (0-9), дефисы (десятичное число ASCII 45), точки (десятичное число ASCII 46), подчеркивания (десятичное число ASCII 95) и двоеточия (десятичное число ASCII 58). Мы рекомендуем использовать кавычки, даже если их можно устранить.
Теперь объединяем оба ответа
Поскольку двойная кавычка должна быть закодирована в URL (, но одиночная кавычка -! ), вы можете использовать следующее для сегментов пути или пути URL:
$path = '/thisisa"quote/helloworld/';
$path = implode('/', array_map('rawurlencode', explode('/', $path)));
И если вы хотите поместить этот URL-путь в атрибут HTML, используйте функцию htmlspecialchars
для кодирования оставшихся специальных символов HTML:
echo '<link rel="canonical" href="' . htmlspecialchars($path) . '" />';