নতুন লাইন দ্বারা পিএইচপি স্ট্রিং বিস্ফোরণ


253

সরল, তাই না? ঠিক আছে, এটি কাজ করছে না: - \

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

28
একক উদ্ধৃতি অর্থ "এই স্ট্রিংটিকে বিশ্লেষণ করবেন না"। @ নির্বাচন0r এর উত্তর সম্ভবত আপনি যা খুঁজছেন তা।
রায়ান কিনাল

3
কীভাবে নতুন লাইন এবং পিএইচপি স্ট্রিং থেকে রিটার্ন সরিয়ে ফেলার সম্ভাব্য সদৃশ ? এটি ইতিমধ্যে স্ট্রিং এবং কিছু অন্যান্য থেকে নির্ভরযোগ্যভাবে নিউজলাইনগুলি সরিয়ে নেওয়ার একটি সদৃশ । প্রশ্ন জিজ্ঞাসার আগে ফ্রিজিং অনুসন্ধান ফাংশনটি ব্যবহার করুন!
গর্ডন

1
@ গর্ডন: হা, আমি দেখেছি কর্নেল শ্র্যাপেল অন্য প্রশ্নে কী বলেছিল। কিন্ডা আসলে দু: খিত। যদিও আমার ঘনিষ্ঠ ভোট যোগ করা হচ্ছে।
BoltClock

9
অন্যদের দ্বারা উল্লিখিত একক উদ্ধৃতি ছাড়াও, সিআরএলএফ জোড়া \r\nঅন্য উপায়ে নয়।
পাওয়ারলর্ড

1
এটি মনে রাখার চেষ্টা করুন: et R etur \ N
l00k

উত্তর:


410

ভাল অভ্যাস

প্রথম উত্তরের মন্তব্যে উল্লিখিত হিসাবে, সেরা অনুশীলন হ'ল পিএইচপি ধ্রুবক PHP_EOL ব্যবহার করা যা বর্তমান সিস্টেমটির EOL ( লাইনের শেষ ) প্রতিনিধিত্ব করে।

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

পিএইচপি আরও অনেক দরকারী দরকারী ধ্রুবক সরবরাহ করে যা আপনি আপনার কোড সিস্টেমকে স্বাধীন করতে ব্যবহার করতে পারেন, দরকারী এবং সিস্টেমের স্বতন্ত্র ডিরেক্টরি নির্দেশকগুলি খুঁজে পেতে এই লিঙ্কটি দেখুন ।

সতর্কতা

এই ধ্রুবকগুলি আপনার পৃষ্ঠা সিস্টেমটিকে স্বতন্ত্র করে তোলে, তবে আপনি যখন অন্য সিস্টেমে সঞ্চিত ডেটা সহ ধ্রুবকগুলি ব্যবহার করেন তখন এক সিস্টেম থেকে অন্য সিস্টেমে যাওয়ার সময় আপনি সমস্যার মধ্যে পড়তে পারেন। নতুন সিস্টেমের ধ্রুবকগুলি পূর্ববর্তী সিস্টেমের থেকে পৃথক হতে পারে এবং সঞ্চিত ডেটা আর কাজ না করে। সুতরাং কোনও সিস্টেমের উপর নির্ভরশীল অংশগুলি সরাতে আপনার ডেটা সংরক্ষণের আগে সম্পূর্ণভাবে পার্স করুন।

হালনাগাদ

আন্দ্রেসের মন্তব্য আমাকে বুঝতে পেরেছিল যে আমি এখানে উপস্থাপন করা 'সেরা অনুশীলন' সমাধান বর্ণিত ব্যবহারের ক্ষেত্রে প্রযোজ্য নয়: সার্ভারের ইওএল (পিএইচপি) ইওএল এর সাথে ব্রাউজার (কোনও ওএস) ব্যবহার করছে না, তবে সে (ব্রাউজার) হ'ল স্ট্রিংটি কোথা থেকে আসছে।

সুতরাং দয়া করে আপনার সমস্ত ঘাঁটি কভার করতে @ অ্যালিন_পুরুকু ( তিনটি নীচে ) থেকে সমাধানটি ব্যবহার করুন (এবং তার উত্তরটিকে সমর্থন করুন):

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

5
এটি একটি নতুন উত্তর তবে এটি সম্ভবত সেরা এবং সঠিকভাবে গৃহীত উত্তর
ফ্রেজরাস 19

এটি আশ্চর্যের বিষয়, যেহেতু পিএইচপি এটি করতে চায় আপনি তা করতে পারেন :) আপনি কি আমাকে আপনার ওএস এবং পিএইচপি সংস্করণ সম্পর্কে আরও বিশদ দিতে পারেন, সম্ভবত পেস্টবিনে বা স্টেচ-এর কোনও টুকরো কোড। অনুরূপ?
লার্জান

16
আপনি PHP_EOL ব্যবহার করতে পারবেন না কারণ সিস্টেম এবং ইনপুট উত্সটির একে অপরের সাথে কোনও সম্পর্ক নেই। ব্যবহারকারী যদি উইন্ডোজে নতুন লাইন স্থাপন করে এবং পিএইচপি লিনাক্সে চলমান থাকে তবে ফলাফলটি ভেঙে যেতে পারে।
বেলার

1
@ বারেল হুবহু, আমি যে পরিস্থিতিটি 'সতর্কতা' অংশে বর্ণনা করেছি ঠিক তা বোঝায়;) প্রশ্নটি পরিষ্কারভাবে জানায়নি যে এটি ডাটাবেসে সঞ্চিত একটি পুরানো ইনপুট। দয়া করে 'সতর্কতা' অংশটি পড়ুন এবং আপনি দেখতে পাবেন যে আমি সেখানে সেই পরিস্থিতিটি coverেকে রেখেছি।
লার্জান

7
এই উত্তরটি এই ব্যবহারের ক্ষেত্রে কেবল ভুল। এই ক্ষেত্রে PHP_EOL ধ্রুবক ব্যবহার করবেন না কারণ ইনপুট উত্স (যেমন ব্যবহারকারীর ব্রাউজার) অবশ্যই আপনার সিস্টেম নয়। একটি সমাধান ব্যবহার করুন যা সমস্ত ভিন্ন লাইন শেষের যত্ন করে (আলিন পুরকারু থেকে উত্তর)।
Andreas

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
@ ওয়েবিবিডেভ PREG_SPLIT_NO_EMPTY সুন্দর, তবে এটি খালি লাইনগুলি মুছে ফেলবে। এটি পছন্দসই বা নাও হতে পারে।
জেএমএস

এই নিদর্শনটি আমার জন্য প্রতিটি বর্ণের সাথে মিলবে কারণ কিছুই উপস্থিত না থাকলেও এটি সাফল্যের ফলস্বরূপ। "?" মানে 0 বা এক সময়, সুতরাং \ r এবং \ n উভয় উপস্থিত না থাকলেও এটির পক্ষে এটি মিলানো সম্ভব। আপনি "স্থির" বলছেন কিন্তু আমি তা দেখতে পাচ্ছি না। আমি এর পরিবর্তে / (\ r | \ n) ব্যবহার করেছি।
রল্ফ

1
@ রোল্ফ মনে হচ্ছে আমি তাড়াতাড়ি একটি সম্পাদনা করেছি। এটি এখনই সংশোধন করেছেন। আপনার কী ব্যবহার করা উচিত তা নির্ভর করে আপনি আউটপুটে খালি লাইনগুলি চান কিনা তা নির্ভর করে। আমার উত্তর থেকে বিকল্পটি খালি লাইনও দেয়।
অ্যালিন পুরাকারু

3
@ অ্যালিনপুরকারু আপনি কি উত্তরটি দিয়ে পরিষ্কার করতে পারেন যে কোনটি (উভয়ই নয়, উভয়ই নয়) ফাঁকা ফিরবে এবং কোনটি হবে না?
প্যাট্রিক

150

"\n\r"(ডাবল উদ্ধৃতি) চেষ্টা করুন বা ঠিক "\n"

আপনার কাছে কোন প্রকারের EOL রয়েছে তা আপনি যদি নিশ্চিত না হন তবে আপনার বিস্ফোরণের আগে একটি str_replace চালান, "\ n \ r" কে "\ n" দিয়ে প্রতিস্থাপন করুন।


52
পিএইচপি-তে একক উদ্ধৃতি অর্থ "এই স্ট্রিংটিকে বিশ্লেষণ করবেন না"। এর অর্থ হল আপনার নিয়ন্ত্রণের অক্ষরগুলি বিশ্লেষণযোগ্য নয়, সেগুলিকে আক্ষরিক হিসাবে নেওয়া হচ্ছে (লাইন ব্রেক এবং ক্যারেজ ফেরানো নয়, তবে প্রকৃত, আক্ষরিক '\ n \ r')। ডাবল উদ্ধৃতি ব্যবহারের অর্থ "এই স্ট্রিংটিকে বিশ্লেষণ করুন" এবং এর ফলে আপনার নিয়ন্ত্রণের অক্ষরগুলি বিশ্লেষণ করা হবে। +1
রায়ান কিনাল

17
/n/r? আমি জানি ওপি লিখেছিল তবে সঠিক উইন্ডোজ ইওলটি হল\r\n
ওয়েববিডেভ

20
পিএইচপি বিবেচনা লাইনের শেষে ধ্রুবক: PHP_EOL
ড্যানিয়েল ডাব্লু।

হাই সবাই, এটি অবশ্যই সঠিক উত্তর! আমি ভাবছি কেন @ অলিন পুরকারু উত্তর পেয়েছে ৪৪ টি ভোট .. এটি ভুল !!! এটি সর্বদা সঠিকভাবে কাজ করছে না যদিও মনে হয় এটি কাজ করে .. তাই যে কেউ একই জিনিসটির জন্য আটকে রয়েছে তার জন্য আমার মন্তব্য
রফিক বারী

3
কেবল \ r কে অগ্রাহ্য করুন, এটি without n ব্যতীত ব্যবহারের সর্বশেষ ওএস ছিল OS9 ( en.wikedia.org/wiki/Newline#Referencesations )। সুতরাং এটি আপনাকে সেরা ফলাফল দেবে:explode("\n", str_replace("\r", '', $string));
ড্যানিয়েল

15

এখানে প্রচুর জিনিস:

  • আপনার একক উদ্ধৃতি নয়, ডাবল উদ্ধৃতি ব্যবহার করা দরকার, অন্যথায় পালানো অক্ষরগুলি পালাতে পারবেন না।
  • স্বাভাবিক ক্রম হয় \r\n, না \n\r
  • উত্সের উপর নির্ভর করে, আপনি কেবল \nছাড়া পাচ্ছেন \r(বা এমনকি অস্বাভাবিক ক্ষেত্রেও সম্ভবত সম্ভবত \r)

শেষ পয়েন্টটি দেওয়া, আপনি খুঁজে পেতে পারেন preg_split()সম্ভাব্য সমস্ত রূপগুলি আপনাকে ডেটা বিভক্ত করার একটি আরও নির্ভরযোগ্য উপায় প্রদান করবে explode()। তবে বিকল্পভাবে আপনি ন্যায়বিচারের explode()সাথে \nব্যবহার trim()করতে পারেন এবং তারপরে \rচারদিকে ঝুলন্ত রেখে যাওয়া কোনও অক্ষর মুছে ফেলতে ব্যবহার করুন ।


দুর্দান্ত উত্তর। সুচিন্তা, সমস্ত কিছু আবরণ। ধন্যবাদ!
Kosta Kontos

11

এই পিএইচপি ফাংশন দ্বারা স্ট্রিং বিস্ফোরিত করা সম্পর্কে newline

দৃষ্টি আকর্ষণ করছি : এ নতুন লাইন উইন্ডোজ হয় পান \ 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

নিখুঁত নয় তবে আমি মনে করি এটি অবশ্যই নিরাপদ be যোগ nl2br :

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

1

এটা চেষ্টা কর:

explode(PHP_EOF, $lines);

3
অবশ্যই পিএইচপি_ইওএল ইওএফের চেয়ে বেশি নয়
ইভেন

1

এটি যত সহজ মনে হচ্ছে

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

আপনি শুধু যথাযথ পাঠ পাস করতে হবে "\ N" ও লেখার \ N সরাসরি একটি এস্কেপ সিকোয়েন্স হিসাবে ব্যবহার করা হচ্ছে। সুতরাং "\\" একটি সরল পশ্চাদপট স্ল্যাশ পাস করতে হবে এবং তারপরে "n" রাখুন


0

প্রথমত, আমি মনে করি এটি সাধারণত \r\n, দ্বিতীয়ত, সমস্ত সিস্টেমে সেগুলি এক নয়। এটি কেবল উইন্ডোতে কাজ করবে। নতুন লাইনগুলি কীভাবে প্রতিস্থাপন করা যায় তা নির্ধারণ করার চেষ্টা করা এক ধরনের বিরক্তিকর কারণ বিভিন্ন সিস্টেমগুলি তাদের সাথে আলাদা আচরণ করে ( এখানে দেখুন )। আপনার ভাল ভাগ্য ভাল সঙ্গে থাকতে পারে \n


0

অন্য কেউ যদি এটি চেষ্টা করে কিন্তু এটি কাজ করে না, তবে এটি একটি অনুস্মারক যা আপনি সম্ভবত মস্তিষ্কের মতোই পার্ট করেছেন done

আপনি কি মাইএসকিএল আগে স্ট্রিং এড়িয়ে গেছেন? এক্ষেত্রে নিউলাইন চরিত্রটি আর নতুন লাইনের চরিত্র নয়।

আমি এটিকে পার্সিং এড়াতে কিছু করি না, কেবল '\ n' (আক্ষরিকভাবে ব্যাকস্ল্যাশ এবং এন দ্বারা প্রকৃত নিউলাইন চরিত্রের পরিবর্তে বিস্ফোরিত হয়ে বিস্ফোরিত হয়েছিলাম) ।


3
মাইএসকিএল পালানোর পরে যেকোন স্ট্রিং ম্যানিপুলেশনগুলি করা একেবারেই বোধগম্য নয়
আপনার প্রচলিত সেনস

0

ইনপুট পাঠ্যবাক্সগুলি থেকে পোস্ট করা লাইন বিরতি?
আমার পক্ষে যা দ্রুত কাজ করে তা হ'ল যে কোনও পাঠ্য বা এক্সেল বা এইচটিএমএল টেবিল প্রকার বা নতুন লাইনের ধরণের ডেটা কপি করা এবং এটি ইনপুটেক্সবক্সের পরিবর্তে একটি টেক্সারিয়ায় আটকানো: এটি পোস্টে লাইন ব্রেকগুলি অক্ষত রাখে।

 <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

আপনি এটি পুনরায় দিয়ে চেষ্টা করতে পারেন:

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


0

আমার জন্য যা কাজ করেছে তা এখানে। পিএইচপি 5.6 এর পাশাপাশি পিএইচপি 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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.