2010-02-16 4 views
3

문자열 입력은 사용자가 새 행의 모든 ​​단일 항목을 입력해야하는 텍스트 영역에서 제공됩니다.문자열에서 개행 문자를 신뢰할 수있게 제거

양식을 처리 할 때,이 같은 단일 항목의 배열로 텍스트 영역에 입력을 폭발하기 쉽다 : 그것은 잘 작동하지만 다른 시스템에서 제대로 작동하지에 대해 나는 걱정

$arr = explode("\n", $textareaInput); 

(I 현재 Windows에서만 테스트 할 수 있음). newline은 \ r \ n 또는 다른 플랫폼에서 \ r으로 표시된다는 것을 알고 있습니다. Linux, Solaris, BSD 또는 다른 운영 체제에서도 위의 코드 줄이 올바르게 작동합니까?

답변

4

'\ 연구'를 자체 줄 끝이 유닉스를 기반으로 정말 (안 OSX 때문에 더 이상 사용하지 않을 것 오래된 관례로).

explode은 괜찮습니다. Windows 사용자의 각 결과 요소에서 '\ r'을 제외하고 trim을 누르십시오.

4
$arr = preg_split("/[\n\r]+/", $textareaInput); 
8

당신은 그렇게 preg_split를 사용할 수 있습니다.

$arr = preg_split('/[\r\n]+/', $textareaInput); 

IT는 \r 또는 \n 문자의 조합에 분할합니다. \s을 사용하여 공백 문자를 포함 할 수도 있습니다.

앞의 코드는 잘 작동하지만, 그것은 또한 빈 줄을 제거하는 것이 나에게 발생
편집. 당신은 빈 줄을 유지하려면, 당신은 대신을 시도 할 수 있습니다 :

$arr = preg_split('/(\r\n|[\r\n])/', $textareaInput); 

을 그것은 기본적으로 Windows 버전 \r\n를 찾아 시작하고, 실패 할 경우는 기존의 Mac 버전 \r 또는 중 하나를 찾습니다 유닉스 버전 \n.

예를 들어

:

<?php 
$text = "Windows\r\n\r\nMac\r\rUnix\n\nDone!"; 
$arr = preg_split('/(\r\n|[\r\n])/', $text); 
print_r($arr); 
?> 

인쇄 :

Array 
(
    [0] => Windows 
    [1] => 
    [2] => Mac 
    [3] => 
    [4] => Unix 
    [5] => 
    [6] => Done! 
) 
+0

@Michael Brooks 정규식입니다. [\ r \ n]은'\ r' 또는'\ n'을 의미합니다. 두 캐릭터의 ... 그리고 아니, 당신은 틀렸다. 사실 나는 리눅스에서 일하는 것을 더 선호한다. 나는 그 차이점을 잘 알고있다. – Atli

1

당신은 입력 정상화 할 수 있습니다 : 당신이 정규 표현식으로 폭발 할 수 있습니다, 또는

<?php 

$foo = strtr($foo, array(
    "\r\n" => "\n", 
    "\r" => "\n", 
    "\n" => "\n", 
)); 

?> 

을 :

<?php 

$foo = preg_split ("/[\r\n]+/", $foo); 

?> 
0

다음 코드는

<?php 
$split = preg_split('/[\r\n]+/', $src); 
foreach ($split as $k=>$string) { 
    $split[$k] = trim($string); 
    if (empty($split[$k])) 
    unset($split[$k]); 
} 
ksort($split); 
$join = implode('', $split); 
?> 

함께 문자열을 얻을 수있는 일을해야한다 newlinews는 완전히 벗겼다. 하지만 JS에서는 올바르게 작동하지 않을 것입니다 : (

관련 문제