PHP & mySQL: Когда точно использовать htmlentities?

Выражения оцениваются слева направо. Скобки (и приоритет) просто выражают группировку, они не выражают порядок оценки.

Итак,

 11 * (12 + 5)
++a   ++a

равно

187
21
задан Devner 16 January 2010 в 15:07
поделиться

3 ответа

Вот общее правило.

Побег переменных в последний момент .

Вы хотите, чтобы ваши переменные были чистыми представлениями данных. То есть, если вы пытаетесь сохранить фамилию кого-то по имени «О'Брайен», то вы определенно не хотите:

O'Brien
O\'Brien

.. потому что, хорошо Это не его имя: в нем нет амперсандов и слэшей. Когда вы берете эту переменную и выводите ее в определенном контексте (например, вставляете в SQL-запрос или печатаете на HTML-страницу), это , когда вы изменяете ее.

$name = "O'Brien";

$sql = "SELECT * FROM people "
     . "WHERE lastname = '" . mysql_real_escape_string($name) . "'";

$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";

Вы никогда не хотите, чтобы строки htmlentities -кодированные хранились в вашей базе данных. Что происходит, когда вы хотите сгенерировать CSV или PDF, или что-нибудь, что не является HTML?

Содержите данные в чистоте и избегайте только для конкретного контекста момента.

51
ответ дан nickf 29 November 2019 в 06:36
поделиться

По сути, вы должны использовать mysql_real_escape_string до вставки базы данных (для предотвращения внедрения SQL), а затем htmlentities и т. Д. В точке вывода.

Вы также захотите применить проверку работоспособности ко всем пользовательским вводам, чтобы гарантировать (например), что числовые значения действительно являются числовыми и т. Д. Такие функции, как is_int , is_float , и т.д. полезны на этом этапе. (См. раздел функций обработки переменных руководства по PHP для получения дополнительной информации об этих и других подобных функциях.)

5
ответ дан John Parker 29 November 2019 в 06:36
поделиться
  1. Только до того, как вы печатаете значение (независимо от DB или от $ _get / $ _ post) в HTML. HTMLEntities не имеет ничего общего с базой данных.
  2. B - сверху. Вы должны MySQL_REAL_ESCAPE_STRING перед вставкой в ​​БД и HTMLEntities перед печатью в HTML. Вам не нужно распределять теги, после того, как теги HTMLEntities будут отображаться на экране, так как
    etc

теоретически вы можете выполнять htmlentititities, прежде чем вставлять в БД, но это может сделать дальнейшую обработку данных, если вам нужно оригинал текст.

3. See above
5
ответ дан 29 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: