Использование nl2br и mysql_real_escape_string одновременно - PullRequest
1 голос
/ 07 декабря 2009

Как правильно использовать nl2br следующим образом.

У меня есть данные постов, которые поступают из области ввода текста

        $data = $_POST;
        $escaped_data = array();
        foreach ($data as $key => $val) {
            $escaped_data[$key] = mysql_real_escape_string($val);
        }
        $desc = $escaped_data[description];
        $desc = nl2br($desc);

Ответы [ 2 ]

5 голосов
/ 07 декабря 2009

На самом деле, правильный способ использования nl2br () - это не использовать его вообще, когда вы храните свои данные - это когда вы читаете из базы данных и собираетесь вывести ее на клиент. Данные не должны быть отформатированы при добавлении в базу данных, что если вы позже захотите создать REST-сервис и вам действительно нужны эти новые строки вместо HTML-элемента?

0 голосов
/ 07 декабря 2009

Вообще говоря, если вы хотите добавить строку в ваш SQL-запрос, вы должны сразу же закрыть ее перед добавлением в ваш SQL-запрос.

Я предполагаю, что вы хотите экранировать все свои данные в начале вашего PHP-скрипта, чтобы вам не пришлось беспокоиться о экранировании.

Экранирующая строка для запросов SQL не должна быть включена, потому что это плохой метод проектирования:

  1. Что происходит, когда вы добавляете экранированную строку в элемент ввода HTML-формы? Исходная строка клиента будет изменена.
  2. Это неудобный или проблемный способ использования подготовленных операторов с уже экранированными данными.

Я думаю, что следует использовать следующий код:

function init_filter_input($method_array /* $_GET, $_POST, or whatever you wish */ )
{
    filter_UTF8($method_array); // for a UTF8 encoded string
    filter_HTML($method_array);
}

function filter_UTF8($mixed)
{
    return is_array($mixed)
        ? array_map('filter_UTF8',$mixed)
        : iconv('UTF-8','UTF-8//IGNORE',$mixed);
}   

function filter_HTML($mixed)
{
    return is_array($mixed)
        ? array_map('filter_HTML',$mixed)
        : htmlspecialchars(trim($value),ENT_QUOTES);
}

Если вы хотите добавить строку в ваш запрос SQL, вы можете решить использовать подготовленные операторы или sprintf:

// sprintf example:

query('SELECT ... WHERE username="%s"', $unescaped_username);

function query($query_str, $params)
{
    if (is_array($params))
    {
        $params = array_map('filter_SQL', $params);
        $query_str = vsprintf($queryStr, $params);
    }
    else
        $query_str = sprintf($query_str ,filter_SQL($params));

    mysql_query($query_str);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...