Как лучше всего устанавливать атрибут html через PHP? - PullRequest
48 голосов
/ 21 января 2010

При выполнении этой работы в PHP можно встретить такую ​​проблему:

<span title="<?php echo $variable;?>">...

Проблема в том, что если $variable содержит двойные кавычки, следует изменить его на \"

И это еще не вся история:

<span title='<?php echo $variable;?>'>...

В этом случае нам нужно изменить одинарные кавычки на \', но оставить двойные кавычки как есть.

Так, как мы можем сделать это в общем свойстве?

Ответы [ 4 ]

82 голосов
/ 21 января 2010

Вы всегда хотите HTML-кодировать вещи внутри атрибутов HTML, что вы можете сделать с htmlspecialchars:

<span title="<?php echo htmlspecialchars($variable); ?>">

Возможно, вы хотите установить второй параметр ($quote_style) на ENT_QUOTES.

Единственный потенциальный риск заключается в том, что $variable может быть уже закодирован, поэтому может захотеть установить последний параметр ($double_encode) на false.

3 голосов
/ 21 января 2010

Ну, прежде чем выводить какой-либо текст в HTML, вы должны экранировать его, используя htmlspecialchars () . Так что просто убедитесь, что (двойная) цитата правильно изменена.

Обратите внимание на второй параметр этой функции.

0 голосов
/ 28 октября 2015

У инструмента Bat есть метод StringTool :: htmlAttributes ($ arrayOfAttributes), который тоже выполняет эту работу.

https://github.com/lingtalfi/Bat/blob/master/StringTool.php

0 голосов
/ 28 января 2010

Обращаясь к вашему редактированию [ Редактировать: , который вы тем временем удалили]: Когда вы динамически размещаете JavaScript на своем сайте, вы должны до хорошо знать, как это будет выглядеть , Иначе вы широко открываете дверь для атак XSS. Это не означает, что вы должны знать каждую кавычку, но вы должны знать достаточно, чтобы решить, как вставить его в строку, где вы, наконец, выведите его в HTML-файл.

Помимо этого,

<a onclick="func(&apos;l&apos;)">

работает точно так же, как

<a onclick="func('l')">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...