नई लाइन द्वारा PHP स्ट्रिंग को विस्फोट करें


253

सरल, सही? खैर, यह काम नहीं कर रहा है: - \

$skuList = explode('\n\r', $_POST['skuList']);

28
सिंगल कोट्स का अर्थ है "इस स्ट्रिंग को पार्स न करें"। @ Select0r का उत्तर शायद वही है जो आप खोज रहे हैं।
रयान काइल

3
कैसे नई लाइनों को हटाने और php स्ट्रिंग से रिटर्न की नकल संभव है ? जो पहले से ही स्ट्रिंग और कुछ अन्य लोगों से विश्वसनीय ढंग से समाचारों को हटाने का डुप्लिकेट था । कृपया प्रश्न पूछने से पहले फ्रिगिंग खोज फ़ंक्शन का उपयोग करें!
गॉर्डन

1
@ गोर्डन: हा, मैंने देखा कि कर्नल श्रीपाल ने उस अन्य प्रश्न में क्या कहा। किंडा वास्तव में दुखी। हालांकि मेरे करीबी वोट जोड़ना।
BoltClock

9
दूसरों द्वारा उल्लिखित एकल उद्धरणों के अलावा, CRLF जोड़े \r\nअन्य तरीके से नहीं हैं ।
पॉवरलॉर्ड

1
याद करने की कोशिश करें कि: \ R etur \ N
l00k

जवाबों:


410

सर्वश्रेष्ठ प्रणालियां

जैसा कि पहले उत्तर के लिए टिप्पणी में उल्लेख किया गया है, सबसे अच्छा अभ्यास PHP निरंतर PHP_EOL का उपयोग करना है जो वर्तमान प्रणाली के ईओएल ( लाइन का अंत ) का प्रतिनिधित्व करता है ।

$skuList = explode(PHP_EOL, $_POST['skuList']);

PHP बहुत सारे अन्य उपयोगी स्थिरांक प्रदान करता है जिनका उपयोग आप अपने कोड सिस्टम को स्वतंत्र बनाने के लिए कर सकते हैं, उपयोगी और सिस्टम स्वतंत्र निर्देशिका के आवेदकों को खोजने के लिए इस लिंक को देखें ।

चेतावनी

ये स्थिरांक आपके पेज सिस्टम को स्वतंत्र बनाते हैं, लेकिन जब आप किसी अन्य सिस्टम पर संग्रहीत डेटा के साथ स्थिरांक का उपयोग करते हैं तो आप एक सिस्टम से दूसरे सिस्टम में जाने पर समस्याओं में भाग सकते हैं। नई प्रणाली की स्थिरांक पिछली प्रणाली से अलग हो सकती है और संग्रहीत डेटा अब काम नहीं कर सकता है। इसलिए किसी भी सिस्टम निर्भर भागों को हटाने के लिए इसे संग्रहीत करने से पहले अपने डेटा को पूरी तरह से पार्स करें।

अपडेट करें

एंड्रियास की टिप्पणी ने मुझे एहसास दिलाया कि मेरे द्वारा प्रस्तुत 'बेस्ट प्रैक्टिस' समाधान वर्णित उपयोग-मामले पर लागू नहीं होता है: सर्वर के ईओएल (पीएचपी) का ईओएल ब्राउज़र (किसी भी ओएस) का उपयोग करने से कोई लेना-देना नहीं है, लेकिन वह (ब्राउज़र) वह जगह है जहाँ से स्ट्रिंग आ रही है।

तो कृपया अपने सभी ठिकानों को कवर करने के लिए @Alin_Purcaru ( तीन डाउन ) से समाधान का उपयोग करें (और आपके उत्तर को देखें):

$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);

5
यह एक नया उत्तर है, लेकिन यह संभवतः सबसे अच्छा और सही-सही स्वीकृत उत्तर है
frazras

यह अजीब है, जैसा कि यह है कि PHP आपको किस तरह से करना चाहता है :) क्या आप मुझे अपने OS और PHP संस्करण के बारे में अधिक जानकारी दे सकते हैं, शायद PasteBin या sth पर कोड का एक टुकड़ा। समान?
लार्जन

16
आप PHP_EOL का उपयोग नहीं कर सकते क्योंकि सिस्टम और इनपुट स्रोत का एक दूसरे से कोई लेना-देना नहीं है। यदि उपयोगकर्ता विंडोज में नई लाइनें डालता है और पीएचपी लिनक्स पर चल रहा है तो परिणाम टूट सकता है।
नंगे पाँव

1
@barell वास्तव में, उस स्थिति को बताता है जिसे मैं 'चेतावनी' भाग में वर्णित करता हूं;) प्रश्न में स्पष्ट रूप से यह नहीं बताया गया है कि यह डेटाबेस में संग्रहीत एक पुराना इनपुट है। कृपया 'चेतावनी' भाग पढ़ें और आप देखेंगे कि मैं उस स्थिति को कवर करता हूँ।
लार्जन

7
यह उत्तर केवल इस उपयोग-मामले के लिए गलत है। इस मामले में PHP_EOL निरंतर का उपयोग न करें क्योंकि इनपुट स्रोत (जैसे उपयोगकर्ता का ब्राउज़र) निश्चित रूप से आपका सिस्टम नहीं है। एक समाधान का उपयोग करें जो सभी अलग-अलग लाइन एंडिंग्स (एलिन पुरकारू से उत्तर) का ख्याल रखता है।
एंड्रियास

241

सभी मामलों को कवर करें। भरोसा न करें कि आपका इनपुट विंडोज वातावरण से आ रहा है।

$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);

या

$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);

21
यह खाली सरणी तत्वों में परिणाम देगा यदि ईओएल है \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']);
webbiedave

2
@webbiedave PREG_SPLIT_NO_EMPTY अच्छी है, लेकिन यह खाली लाइनों को हटा देगा। यह वांछनीय हो सकता है या नहीं भी हो सकता है।
JMS

यह पैटर्न मेरे लिए हर अक्षर से मेल खाता है, क्योंकि इससे सफलता मिलती है, भले ही कुछ भी न हो। "?" इसका मतलब है कि 0 या एक बार, इसलिए यह मैच के लिए भी संभव है, भले ही \ r और \ n दोनों मौजूद न हों। आप कहते हैं "निश्चित" लेकिन मुझे वह दिखाई नहीं देता। मैंने / (\ r। \ N) + / बजाय का उपयोग किया।
रॉल्फ

1
@ रॉल्फ ऐसा लगता है कि मैंने जल्दी में एक संपादन किया है। अब ठीक कर दिया। आपको क्या उपयोग करना चाहिए यह इस बात पर निर्भर करता है कि आप आउटपुट में खाली लाइनें चाहते हैं या नहीं। मेरे जवाब से विकल्प भी खाली लाइनों को लौटाता है।
बजे एलिन पुरकारू

3
@AlinPurcaru क्या आप उत्तर में स्पष्ट कर सकते हैं कि दोनों (या तो, न तो?) खाली लौटेंगे और जो नहीं करेंगे?
पैट्रिक

150

कोशिश करें "\n\r"(दोहरे उद्धरण) या बस "\n"

यदि आप सुनिश्चित नहीं हैं कि आपके पास किस प्रकार का EOL है, तो अपने विस्फोट से पहले एक str_replace चलाएं, "\ n" के साथ "\ n" को प्रतिस्थापित करें।


52
PHP में सिंगल कोट्स का अर्थ है "इस स्ट्रिंग को पार्स न करें"। इसका मतलब है कि आपके नियंत्रण पात्रों को पार्स नहीं किया जा रहा है, उन्हें शाब्दिक के रूप में लिया जा रहा है (लाइन ब्रेक और गाड़ी वापसी नहीं, लेकिन वास्तविक, शाब्दिक '\ n \ r')। दोहरे उद्धरण चिह्नों का उपयोग करने का अर्थ है "इस स्ट्रिंग को पार्स", और इस प्रकार आपके नियंत्रण वर्णों को पार्स किया जाएगा। +1
रयान काइल

17
/n/r? मुझे पता है कि ओपी ने लिखा है कि लेकिन सही विंडोज़ \r\n
ईओएल

20
लाइन स्थिरांक के PHP अंत पर विचार करें PHP_EOL:।
डैनियल डब्ल्यू

हाय सब, यह निश्चित रूप से सही जवाब है! मैं सोच रहा था कि @Alin Purcaru को 44 वोट क्यों मिले .. यह गलत है !!! यह हमेशा सही ढंग से काम नहीं कर रहा है, हालांकि ऐसा लगता है कि यह काम करता है .. इसलिए यहाँ किसी पर एक ही चीज के लिए मेरी टिप्पणी है
रफीक बारी

3
बस \ r की अवहेलना करें, \ n के बिना इसे उपयोग करने वाला अंतिम OS OS9 था ( en.wikipedia.org/wiki/Newline#Representations )। इसलिए यह आपको सर्वोत्तम परिणाम देगा:explode("\n", str_replace("\r", '', $string));
डैनियलएम

15

यहाँ बहुत सारी चीज़ें:

  • आपको दोहरे उद्धरण चिह्नों का उपयोग करने की आवश्यकता है, न कि एकल उद्धरण, अन्यथा बच गए वर्ण बच नहीं पाएंगे।
  • सामान्य क्रम है \r\n, नहीं \n\r
  • स्रोत के आधार पर, आप सिर्फ \nबिना \r(या यहां तक ​​कि असामान्य मामलों में भी हो सकते हैं \r)

अंतिम बिंदु को देखते हुए, आप पा सकते हैं preg_split()कि सभी संभावित वेरिएंट का उपयोग करने से आपको डेटा को विभाजित करने का अधिक विश्वसनीय तरीका मिलेगा explode()। लेकिन वैकल्पिक रूप से आप explode()बस के साथ उपयोग कर सकते हैं \n, और फिर trim()किसी भी \rवर्ण को हटाने के लिए उपयोग कर सकते हैं जो चारों ओर लटका हुआ है।


बहुत बढ़िया जवाब। रसीला, सब कुछ कवर करता है। धन्यवाद!
कोस्टा कांटोस

11

इस php समारोह से स्ट्रिंग विस्फोट न्यू लाइन

ध्यान दें : में नई लाइन विंडोज है \ r \ n और में लिनक्स और यूनिक्स है \ 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
)


6

एक नई लाइन के लिए, यह सिर्फ है

$list = explode("\n", $text);

एक नई लाइन और कैरिज रिटर्न (विंडोज फाइलों में) के लिए, यह आपके द्वारा पोस्ट किए गए अनुसार है। क्या आपका स्कालिस्ट एक पाठ क्षेत्र है?


4

\nदोहरे उद्धरण चिह्नों में रखें :

explode("\n", $_POST['skuList']);

सिंगल कोट्स में, अगर मुझसे गलती नहीं हुई है, तो इसे अलग \और nअलग माना जाता है ।


3

क्या आपने दोहरे उद्धरण चिह्नों का उपयोग करने की कोशिश की है?


3

सही नहीं है लेकिन मुझे लगता है कि यह सबसे सुरक्षित होना चाहिए। Nl2br जोड़ें :

$skuList = explode('<br />', nl2br($_POST['skuList']));

1

इसे इस्तेमाल करे:

explode(PHP_EOF, $lines);

3
निश्चित रूप से नहीं बल्कि EOF से PHP_EOL
इवेन

1

जितना आसान लगता है

$skuList = explode('\\n', $_POST['skuList']);

आपको बस सटीक पाठ "\ n" पास करने की आवश्यकता है और लेखन \ n सीधे एक एस्केप अनुक्रम के रूप में उपयोग किया जा रहा है। तो "\\" एक साधारण पिछड़े स्लैश को पारित करने के लिए और फिर "एन" डाल दिया


0

सबसे पहले, मुझे लगता है कि यह आमतौर पर है \r\n, दूसरे में, उन सभी प्रणालियों पर समान नहीं हैं। यह केवल खिड़कियों पर काम करेगा। यह एक तरह से कष्टप्रद है कि यह पता लगाने की कोशिश की जाए कि नई लाइनों को कैसे बदला जाए क्योंकि विभिन्न प्रणालियां उनके साथ अलग तरह से व्यवहार करती हैं ( यहां देखें )। आप बस के साथ बेहतर भाग्य हो सकता है \n


0

अगर किसी और ने यह कोशिश की, लेकिन यह काम नहीं कर रहा था, तो यह एक अनुस्मारक है कि आपने शायद मैं ब्रेन फ़ार्ट को I के रूप में किया हो।

क्या आप mysql पहले स्ट्रिंग से बच गए? इस मामले में न्यूलाइन कैरेक्टर अब न्यूलाइन कैरेक्टर नहीं है।

मैंने इसे पार्स करने से बचने के लिए कुछ भी नहीं किया, बस '\ n' द्वारा अनुकूलित और विस्फोट किया गया (शाब्दिक रूप से बैकस्लैश और एन वास्तविक न्यूलाइन वर्ण के बजाय।


3
mysql से बचने के बाद जो भी स्ट्रिंग जोड़तोड़ किया जाता है वह बिल्कुल समझ में नहीं आता है
आपका कॉमन सेंस

0

इनपुट टेक्स्टबॉक्स से पोस्टिंग से हारने वाली लाइन टूट जाती है?
मेरे लिए तेजी से काम करना किसी भी पाठ या एक्सेल या एचटीएमएल टेबल प्रकार या डेटा के न्यूलाइन प्रकार को कॉपी करना और एक इनपेक्टेक्सबॉक्स के बजाय एक टेक्स्टारिया में पेस्ट करना है: इससे पोस्टबार्ट्स 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];

0

यह विधि हमेशा मेरे लिए काम करती है:

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

0

PHP_EOL आमतौर पर एक क्रॉस-प्लेटफॉर्म-संगत तरीके से न्यूलाइन वर्ण खोजने के लिए उपयोग किया जाता है, इसलिए यह डॉस / यूनिक्स मुद्दों को संभालता है।

इसे इस्तेमाल करे:

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

0

आप इसे regex के साथ आज़मा सकते हैं:

$skuList = explode('/[\r\n]+/', $_POST['skuList']);


0

यहाँ मेरे लिए क्या काम किया है। PHP 5.6 और PHP 7.0 में परीक्षण किया गया:

    $skuList = str_replace("\\r\\n", "\n", $_POST['skuList']);
    $skuList = str_replace("\\n\\r", "\n", $skuList);

    $skuList = preg_split("/\n/", $skuList);
    print_r($skuList);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.