स्ट्रिंग से लाइन ब्रेक (कोई वर्ण नहीं!) कैसे निकालें?


146

यह एक ठग प्रतीत हो सकता है, लेकिन बाकी का आश्वासन दिया है कि यह नहीं है - मैंने अपनी समस्या के जवाब के लिए एसओ के साथ-साथ बाकी वेब पर भी खोज की है और एक ही अपर्याप्त "समाधान" को बार-बार ढूंढना समाप्त कर दिया है। किसी भी तरह, यहाँ यह जाता है:

मैं एक textarea से एक MySQL डेटाबेस (एक वर्डप्रेस पर्यावरण के भीतर, लेकिन यह इस समस्या के लिए कोई फर्क नहीं पड़ता, मुझे विश्वास है) से उपयोगकर्ता इनपुट को बचा रहा है। बाद में इसे डीबी से पुनर्प्राप्त किया जाता है ताकि साइट के बैकएंड में एडमीन को दिखाया जा सके। समस्या तब होती है जब उपयोगकर्ता लाइन ब्रेक के साथ पाठ सबमिट करते हैं (यानी एंटर कुंजी दबाएं)।

एक नमूना स्ट्रिंग इस तरह दिख सकता है:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

स्ट्रिंग में पंक्ति वर्णों ("\ n", "\ r", या जैसे) का कोई अंत नहीं है।

मैं nl2br()इसका उपयोग एचटीएमएल आउटपुट उत्पन्न करने के लिए कर रहा हूं , लेकिन यह पर्याप्त नहीं है। फिर परिणाम है:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill

जो, जहां तक ​​मैं समझता हूं, यह अपेक्षित nl2br()परिणाम है, क्योंकि यह टैग को सम्मिलित करता है और पहली जगह में लाइन-ब्रेक को बदलने के लिए नहीं माना जाता है?

हालाँकि मुझे जो प्रारूप चाहिए वह यह होगा:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

तो स्ट्रिंग इस तरह के "\ n" उस में, मैं इसके साथ या तो मारा था के रूप में EOL वर्ण थे str_replace()या preg_replace()और इसके साथ किया जाना है, लेकिन अगर कोई वर्ण नहीं है वहाँ मैं कोई सुराग नहीं क्या सुई या तो उन कार्यों की फ़ीड करने के लिए है पहली जगह में।

मैं DB में संबंधित फ़ील्ड को मैन्युअल रूप से एक्सेस कर सकता हूं, हर लाइनब्रेक के लिए बैकस्पेस को हिट कर सकता हूं और बाद में मैं स्ट्रिंग कार्यों के साथ क्या करना चाहता हूं। इसलिए मुझे पता है कि मुझे उपरोक्त प्रारूप की आवश्यकता है।


यदि स्ट्रिंग आपके पहले उदाहरण की तरह दिखती है, तो आप कैसे कह सकते हैं कि इसमें कोई लाइन ब्रेक वर्ण नहीं है? यह एक पंक्ति में कम से कम दो: दो मिल गया है "धन्यवाद!"
अर्नेस्ट फ्राइडमैन-हिल

Fair enuff @ ErnestFriedman-Hill, आप स्पष्ट रूप से सही हैं - वहाँ "कुछ" है, यह सिर्फ कुछ भी नहीं है जो मुझे नहीं पता है।
जोहान्स पाइले

मैं यह भी नहीं देख सकता कि बिना लाइन ब्रेक पात्रों के नई लाइनें कैसे संभव हैं। क्या आप स्ट्रिंग का निरीक्षण करने के लिए एक हेक्स संपादक का उपयोग कर सकते हैं - मुझे यकीन है कि आप नई लाइनों के लिए वर्ण पाएंगे ...
बिछुआ

जवाबों:


376

आपको इसे एक ऐसे प्रोग के साथ बदलने में सक्षम होना चाहिए जो सभी न्यूलाइन्स और कैरिज रिटर्न को हटा देता है। कोड है:

preg_replace( "/\r|\n/", "", $yourString );

भले ही \nचरित्र दिखाई नहीं दे रहे हैं, अगर आपको गाड़ी का रिटर्न मिल रहा है तो वहां एक अदृश्य चरित्र है। प्रीग रिप्लेस को उन लोगों को पकड़ना और ठीक करना चाहिए।


अविश्वसनीय। मैं तुम्हारी और @bsdnoobz उत्तर की तर्ज पर सब कुछ करने की शपथ ले सकता था, जो दोनों काम करते हैं। ओह ठीक है, मेरे पास जो भी मानसिक अवरोध था, आप दोनों ने मुझे कई टन बचाया। मुझे लगता है कि काफी कठिन सवाल है। धन्यवाद दोस्तों!
जोहान्स पिल

3
ध्यान दें कि यह सभी लाइन ब्रेक से मेल नहीं खाता, अर्थात जो विंडोज सिस्टम पर बनाया गया है। इन्हें पकड़ने के लिए, आप निम्न RegEx का उपयोग कर सकते हैं/\r|\n|\r\n/
Toastrackenigma

6
उपयोग \ R (जो किसी भी पंक्ति को समाप्त करने वाले अनुक्रम का प्रतिनिधित्व करता है) stackoverflow.com/a/16274784/1491212
आर्मेल लार्सर

435

बेन का समाधान स्वीकार्य है, लेकिन str_replace () preg_replace () की तुलना में बहुत तेज़ है

$buffer = str_replace(array("\r", "\n"), '', $buffer);

कम CPU शक्ति का उपयोग करके, विश्व कार्बन डाइऑक्साइड उत्सर्जन को कम करता है।


5
विश्वास नहीं कर सकता कि यह उत्तर अधिक विश्वसनीय नहीं है। 100 से अधिक अंगूठे इस से पहले preg_replace ()
pimbrouwers

62
महत्वपूर्ण: गाड़ी-वापसी और नए कोड के आसपास दोहरे उद्धरण का उपयोग करें। यदि आप एकल उद्धरण का उपयोग करते हैं तो ये सही ढंग से संसाधित नहीं होंगे!
राइट

47
अंगूठे -> "कम सीपीयू शक्ति का उपयोग करके, विश्व कार्बन डाइऑक्साइड उत्सर्जन को कम करता है।"
जन

3
@ जोरी: पिछले एक को कभी नहीं बुलाया जाएगा क्योंकि यह पहले दो द्वारा संभाला जाएगा। यह निरर्थक कोड है।
नाइटफॉक्स89

4
@Joeri को देखते हुए str_replace सभी घटनाओं को हटाता है, \ n और \ n दोनों को वैसे भी नहीं हटाया जाएगा?
ब्रैम वनरॉय

16
$str = "
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill";

echo str_replace(array("\n", "\r"), '', $str);  // echo $str in a single line

11

ऐसा इसलिए nl2br()है क्योंकि नई लाइनें बिल्कुल नहीं हटाती हैं।

रिटर्न के साथ स्ट्रिंग <br />या <br> से पहले सम्मिलित सभी नई-पंक्तियों ( \r\n, \n\r, \nऔर \r)।

str_replaceइसके बजाय उपयोग करें :

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);

7

आप PHP ट्रिम का भी उपयोग कर सकते हैं

यह फ़ंक्शन प्रारंभ और अंत के स्ट्रिप्स से व्हाट्सएप के साथ एक स्ट्रिंग लौटाता है। दूसरे पैरामीटर के बिना, ट्रिम () इन वर्णों को छीन लेगी:

  • "" (ASCII 32 (0x20)), एक साधारण स्थान।
  • "ए टी" (एएससीआईआई 9 (0x09)), एक टैब।
  • "एन" (एएससीआईआई 10 (0x0 ए)), एक नई लाइन (लाइन फीड)।
  • "ए आर" (ASCII 13 (0x0D)), एक गाड़ी वापसी।
  • "\ 0" (ASCII 0 (0x00)), एनयूएल-बाइट।
  • "ए x0B" (ASCII 11 (0x0B)), एक ऊर्ध्वाधर टैब।

3
यह केवल स्ट्रिंग की शुरुआत और अंत में नई सूचियों को लक्षित करेगा। स्ट्रिंग के बीच में आने वाली नई कहानियाँ अछूती रहेंगी।
मिकमैकुसा

6

विंडोज पर भी ठीक से काम करने के लिए मैं उपयोग करने का सुझाव दूंगा

$buffer = str_replace(array("\r\n", "\r", "\n"), "", $buffer);

"\r\n"- विंडोज के लिए, "\r"- मैक के लिए और "\n"- लिनक्स के लिए


2
क्षमा करें दोस्त, लेकिन यहां तक ​​कि '12 में वापस पूछने वाला भी रहा है, मैं आपको पूरी निश्चितता के साथ बता सकता हूं कि यह बेमानी है। अपने आप से निम्नलिखित पूछें: यदि सभी \rऔर \nस्ट्रिंग में हटा दिए जाते हैं, तो उन लोगों के लिए ऐसा क्यों नहीं होगा जो सीधे एक दूसरे का अनुसरण करते हैं?
जोहान्स पिल्ले

वास्तव में, यह स्पष्ट बात मेरे दिमाग में नहीं आई ... धन्यवाद :) मुझे बस एहसास हुआ कि मुझे इससे परेशानी हुई है, लेकिन यह अन्य तरह से गोल था, मैंने \r\nविंडोज पर उपयोग किया और यह लिनक्स पर काम नहीं करता था।
अज्जाह

खैर, मैं इस फ़ंक्शन का उपयोग कॉमा के साथ लाइन ब्रेक को बदलने के लिए कर रहा हूं, इसलिए एक पता एक सिंगल लाइन टेक्स्ट है, इसलिए \r\nFIRST को बदलने में मदद मिलेगी, क्योंकि इसका मतलब है कि प्रत्येक लाइन के लिए दो के बजाय एक कॉमा अगर उस लाइन को तोड़ देती है
मार्टिन

@Martin हाँ, आप सही हैं, मुझे बस एक ही एहसास हुआ है, इसलिए हम \r\nपहले प्रतिस्थापित करते हैं , फिर हम प्रतिस्थापित करते हैं \rऔर \n, मैंने अपना उत्तर संपादित कर लिया है।
अज्जाह

यह अभी भी बेमानी है, यदि आप को दूर करने के सभी के लिए जा रहा \rहै और \r, दूर करने के लिए कोई जरूरत नहीं है \r\n, आप उपयोगकर्ता कर सकते हैं str_replace(array("\r","\n"), "", $buffer);एक ही परिणाम प्राप्त करने के लिए।
19

6

str_replace (PHP_EOL, अशक्त, $ str);


1
हालांकि यह प्रश्न का उत्तर दे सकता है। यह सलाह दी जाती है कि अपने उत्तर के बारे में थोड़ा समझाएं।
अनिरुद्ध शर्मा

जब आप स्ट्रिंग पढ़ते हैं तो PHP_EOL हमेशा काम नहीं करता है। यह तब होता है जब आप उन्हें लिखते हैं।
नाइटफॉक्स89

कोड-ओनली उत्तर स्टैकओवरफ़्लो पर कम मूल्य हैं क्योंकि वे ओपी और भविष्य के पाठकों को शिक्षित करने के लिए बहुत कम करते हैं।
मिकमैकुसा

4

कुछ और अधिक कार्यात्मक (कहीं भी उपयोग करने में आसान):

function strip_carriage_returns($string)
{
    return str_replace(array("\n\r", "\n", "\r"), '', $string);
}

खोज प्रतिस्थापन पैरामीटर के रूप में PHP_EOL का उपयोग करना भी एक अच्छा विचार है! कुडोस।


1

वैकल्पिक में निर्मित: ट्रिम ()

trim  Strip whitespace (or other characters) from the beginning and end of a string
Description 
trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

This function returns a string with whitespace stripped from the beginning and end of str.
Without the second parameter, trim() will strip these characters:

    " " (ASCII 32 (0x20)), an ordinary space.
    "\t" (ASCII 9 (0x09)), a tab.
    "\n" (ASCII 10 (0x0A)), a new line (line feed).
    "\r" (ASCII 13 (0x0D)), a carriage return.
    "\0" (ASCII 0 (0x00)), the NUL-byte.
    "\x0B" (ASCII 11 (0x0B)), a vertical tab.

यह विभिन्न प्रकार की पाठ फ़ाइलों से लाइन विराम को हटाने के लिए है, लेकिन html को संभालता नहीं है।


0

मैं इस काम को करने के लिए 3 लाइनों का उपयोग करता हूं, इसलिए $ s को "सामान" मानें ...

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