Выражения оцениваются слева направо. Скобки (и приоритет) просто выражают группировку, они не выражают порядок оценки.
Итак,
11 * (12 + 5)
++a ++a
равно
187
Вот общее правило.
Побег переменных в последний момент .
Вы хотите, чтобы ваши переменные были чистыми представлениями данных. То есть, если вы пытаетесь сохранить фамилию кого-то по имени «О'Брайен», то вы определенно не хотите:
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?
Содержите данные в чистоте и избегайте только для конкретного контекста момента.
По сути, вы должны использовать mysql_real_escape_string
до вставки базы данных (для предотвращения внедрения SQL), а затем htmlentities
и т. Д. В точке вывода.
Вы также захотите применить проверку работоспособности ко всем пользовательским вводам, чтобы гарантировать (например), что числовые значения действительно являются числовыми и т. Д. Такие функции, как is_int , is_float , и т.д. полезны на этом этапе. (См. раздел функций обработки переменных руководства по PHP для получения дополнительной информации об этих и других подобных функциях.)
теоретически вы можете выполнять htmlentititities, прежде чем вставлять в БД, но это может сделать дальнейшую обработку данных, если вам нужно оригинал текст.
3. See above