간단 하죠? 글쎄, 이것은 작동하지 않습니다 :-\
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
다른 방법 이 아닙니다.
간단 하죠? 글쎄, 이것은 작동하지 않습니다 :-\
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
다른 방법 이 아닙니다.
답변:
모범 사례
첫 번째 답변에 대한 의견에서 언급했듯이 가장 좋은 방법은 현재 시스템의 EOL ( End Of Line ) 을 나타내는 PHP 상수 PHP_EOL 을 사용하는 것 입니다.
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP는 코드 시스템을 독립적으로 만드는 데 사용할 수있는 매우 유용한 상수 를 많이 제공합니다. 이 링크 를 참조 하여 유용하고 시스템 독립적 인 디렉토리 상수를 찾으십시오.
경고
이러한 상수는 페이지 시스템을 독립적으로 만들지 만 다른 시스템에 저장된 데이터로 상수를 사용할 때 한 시스템에서 다른 시스템으로 이동할 때 문제가 발생할 수 있습니다. 새로운 시스템의 상수가 이전 시스템의 상수와 다를 수 있으며 저장된 데이터가 더 이상 작동하지 않을 수 있습니다. 따라서 데이터를 저장하기 전에 데이터를 완전히 구문 분석하여 시스템 종속 부품을 제거하십시오.
최신 정보
Andreas의 의견에 따르면 여기에 제시된 '모범 사례'솔루션은 설명 된 사용 사례에는 적용되지 않습니다. 서버의 EOL (PHP)은 브라우저 (모든 OS)가 사용하는 EOL과 관련이 없습니다. 그러나 그 (브라우저)는 문자열이 나오는 곳입니다.
따라서 @Alin_Purcaru ( three down ) 의 솔루션을 사용하여 모든 기지를 덮고 그의 대답 을 찬성 하십시오.
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
모든 경우를 커버하십시오. 입력 내용이 Windows 환경에서 제공되는 것에 의존하지 마십시오.
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
또는
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
됩니다. 그것을 방지하기 위해, 하나를 사용 : preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(주 \r\n
또는 단순히를 넣어 그 플래그를 사용할 때 불필요하게) \r\n
전에\r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
"\n\r"
(큰 따옴표) 또는 그냥 시도하십시오 "\n"
.
사용중인 EOL 유형이 확실하지 않은 경우 분해하기 전에 str_replace를 실행하여 "\ n \ r"을 "\ n"으로 바꾸십시오.
/n/r
? 나는 OP가 썼다는 것을 알고 있지만 올바른 창 eol은\r\n
PHP_EOL
.
explode("\n", str_replace("\r", '', $string));
여기에 많은 것들이 있습니다.
\r\n
아닙니다 \n\r
.\n
없이 \r
(또는 특별한 경우에, 아마도 단지 \r
)마지막으로, preg_split()
가능한 모든 변형을 사용하면보다 안정적인 데이터 분할 방법을 제공 할 수 있습니다 explode()
. 그러나 대안 explode()
으로 just과 함께 \n
사용 trim()
하고 \r
남은 문자 를 제거하는 데 사용할 수 있습니다.
이 PHP 함수는 줄 바꿈으로 문자열을 확장합니다.
주의 : Windows의 새 줄 은 \ r \ n 이고 Linux 및 Unix 는 \ n입니다.
이 함수는 모든 새 줄을 Linux 모드로 변경 한 다음 분할합니다.
빈 줄은 무시됩니다주의
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
예
$a="\r\n\r\n\n\n\r\rsalam\r\nman khobam\rto chi\n\rche khabar\n\r\n\n\r\r\n\nbashe baba raftam\r\n\r\n\r\n\r\n";
print_r( splitNewLine($a) );
산출
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
우선, 나는 그것이 \r\n
모든 시스템에서 동일하지는 않다고 생각합니다 . 그것은 창문에서만 작동합니다. 다른 시스템이 다른 라인을 다르게 취급하기 때문에 새로운 라인을 교체하는 방법을 알아내는 것은 성가신 일입니다 ( 여기 참조 ). 당신은 그냥 더 나은 행운을 가질 수 있습니다 \n
.
다른 사람이 이것을 시도했지만 작동하지 않았다면, 이것은 당신이 나와 같은 뇌 방귀를했을 수도 있음을 상기시킵니다.
mysql이 먼저 문자열을 이스케이프 했습니까? 이 경우, 개행 문자는 더 이상 개행 문자가 아닙니다.
구문 분석을 피하기 위해 아무것도하지 않았으며 '\ n'( 실제 줄 바꿈 문자 대신 문자 그대로 백 슬래시 및 n)으로 조정하고 폭발했습니다 .
입력 텍스트 상자에서 줄 바꿈이 손실됩니까?
나를 위해 더 빨리 작동하는 것은 텍스트 또는 Excel 또는 HTML 테이블 유형 또는 줄 바꿈 유형의 데이터를 복사하여 inputextbox 대신 텍스트 영역에 붙여 넣는 것입니다. 이렇게하면 줄 바꿈이 POST에서 그대로 유지됩니다.
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
수신 파일 형식 :
$txtArea ='';
$txtArea = $_POST['txtArea'];
$TA = $_POST['txtArea'];
$string = $TA;
$array = preg_split ('/$\R?^/m', $string);
// or any of these:
// $array = explode(PHP_EOL,$string);
// $array = explode("\n", $txtArea);
echo "<br>A0: ".$array[0];
echo "<br>A1: ".@$array[1];
echo "<br>A2: ".@$array[2];
이 방법은 항상 저에게 효과적입니다.
$uniquepattern="@#$;?:~#abcz"//Any set of characters which you dont expect to be present in user input $_POST['skuList'] better use atleast 32 charecters.
$skuList=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['skuList'])));
PHP_EOL
크로스 플랫폼 호환 방식으로 개행 문자를 찾기 위해 표면 상으로 사용되므로 DOS / Unix 문제를 처리합니다.
이 시도:
$myString = "Prepare yourself to be caught
You in the hood gettin' shot
We going throw hell of blows
got my whole frame froze";
$myArray = explode(PHP_EOL, $myString);
print_r($myArray);