2009-12-07 4 views
1

다음과 같은 방법으로 nl2br을 사용하는 올바른 방법은 무엇입니까?동시에 nl2br과 mysql_real_escape_string 사용하기

나는) 텍스트 영역 입력 실제로

 $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); 

답변

5

(nl2br 사용하는 올바른 방법에서 유래 후 데이터가 당신이 당신의 데이터를 저장할 때 전혀 사용하지 않는 것입니다 - 당신이 읽을 때입니다 데이터베이스와 클라이언트에 출력하려고합니다. 데이터가 데이터베이스에 설치 될 때 형식을 지정해서는 안되며, 나중에 REST 서비스를 만들고 HTML 요소 대신 실제로 이러한 새줄이 필요할 경우 어떻게해야할까요?

+0

데이터베이스에서 두 개의 다른 열을 사용하여 해결할 수 있습니다. 하나는 형식이 지정된 문자열이고 다른 하나는 원래 문자열입니다. – Dor

+0

아니면 그냥 한 열을 포맷하지 않고 오버 헤드 데이터를 건너 뜁니다 ... –

+0

+1 ...하지만 PHP 응용 프로그램은 _supposed_ SQL, PHP 및 HTML의 불가해 한 매시가 될 수 있습니까? –

0

일반적으로 SQL 쿼리에 문자열을 추가하려면 SQL 쿼리에 추가하기 전에 즉시 이스케이프해야합니다.

PHP 스크립트를 시작할 때 모든 데이터를 이스케이프 처리하여 이스케이프 걱정을하지 않아도된다고 가정합니다.

  1. 는 당신이 HTML 폼의 입력 요소에 이스케이프 문자열을 추가 발생합니다

    SQL 쿼리 문자열은 그 나쁜 설계 방법이기 때문에 거기에 포함되어서는 안된다 탈출? 원래 클라이언트의 문자열이 수정됩니다.

  2. 이미 이스케이프 된 데이터와 함께 준비된 문을 사용하는 것은 불편하거나 문제가있는 방법입니다.

는 다음 코드를 사용하는 것을 생각 :

// 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); 
} 
: 당신은 당신의 SQL 쿼리 문자열을 추가 할 때

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); 
} 

, 당신은 준비된 명령문, 또는의 sprintf를 사용하기로 결정할 수있다

관련 문제