2013-01-01 4 views
3

html로 사용자가 텍스트 영역에 텍스트를 넣을 수있는 양식이 있습니다.
텍스트 영역의 내용을 MySQL 데이터베이스에 저장합니다 (유형이 TEXT 인 필드).
그럼 어딘가에 내 응용 프로그램에 나는 그 텍스트를로드하고 배열에 넣어야합니다. 각 색인에서 텍스트의 한 줄이됩니다.PHP에서 새 줄 처리하기

<textarea rows="10" cols="80"> 
Row one 
Row two 
Row tree 
</textarea> 

array (output in "php pseudocode"): 
$array = array(); 
$array[0] = Row one; 
$array[1] = Row two; 
$array[2] = Row tree; 

나는 그것을 할 방법 : 은 그때 dB로 저장 나는 그것을 사용로드 :

$br = nl2br($string,true); 
$array = explode("<br />", $br); 

내가 이 nl2br 내가 줄의 끝이 문제를 방지하고자한다 사용하는 이유 다른 플랫폼의 텍스트 나는/n 또는/r/n을 의미합니다.
하지만 내 솔루션에서 어딘가에 오류가 있어야합니다 (배열 $ 배열이 비어 있음) 작동하지 않습니다.

더 나은 솔루션은 아마 어떻게 든 폭발로 배열을 만들거나 줄 바꿈을위한 패턴을 사용하여 배열로 나눌 것입니다. 그러나 여기서 다시 문제를 해결할 수있는 줄 바꿈으로 시작합니다 (문제 \ n 또는 \ r \ n).

아무도 내게 조언을 해줄 수 있습니까? 감사.

답변

3

실제로 클라이언트에 데이터를 보낼 준비가 될 때까지 nl2br을 건너 뛰는 것이 좋습니다. 문제를 해결하려면

// $string = $get->data->somehow(); 
$array = preg_split('/\n|\r\n/', $string); 
+1

... 또는 단지 ''/ \ r? \ n/''. –

+0

@aefxx 고마워 많은 내 문제를 해결 :) – user1097772

+0

@IlmariKaronen 정규 표현식과 그 답변의 차이점은 무엇입니까? – user1097772

-1

입력을받은 경우 데이터베이스에 데이터를 저장하기 전에을 PHP_EOL에 정규화하십시오. 이것은 나를 위해 올바르게 테스트되었습니다. "필터 입력"프로세스에서 한 단계 더 나아간 것입니다. 다른 EOL 문자열을 찾을 수도 있지만 가장 일반적인 것입니다.

<?php // RAY_temp_user109.php 
error_reporting(E_ALL); 

if (!empty($_POST['t'])) 
{ 
    // NORMALIZE THE END-OF-LINE CHARACTERS 
    $t = str_replace("\r\n", PHP_EOL, $_POST['t']); 
    $t = str_replace("\r", PHP_EOL, $t); 
    $t = str_replace("\n", PHP_EOL, $t); 
    $a = explode(PHP_EOL, $t); 
    print_r($a); 
} 

$form = <<<FORM 
<form method="post"> 
<textarea name="t"></textarea> 
<input type="submit" /> 
</form> 
FORM; 

echo $form; 

PHP_EOL에서 분해하고 nol2br() 부분을 건너 뜁니다. var_dump()를 사용하여 결과 배열을 볼 수 있습니다.

+0

PHP_EOL은 임의의 출처에서 오는 텍스트에는 무의미합니다. PHP_EOL은 ** LOCAL ** 시스템의 EOL char (s)로 설정됩니다. 텍스트가 원래 Windows에서 왔고 Linux에서 실행 중이면 잘못 된 문자를 찾고 있기 때문에 아무 것도하지 않습니다. PHP_EOL은 이식성이 필요하지 않고 데이터가 항상 동일한 유형의 OS에 남아있는 경우에만 유용합니다. –

+0

-1'PHP_EOL'은'\ n'' \ r \ n' 문제를 처리하지 않습니다. – aefxx

+0

-1 (태도에 스마일리를 추가했다하더라도), 그리고 실제로 입력을 정규화하기 위해 _how_을 표시하지 않기 위해. –