স্ট্রিং থেকে লাইন ব্রেক (অক্ষর নেই!) কীভাবে সরিয়ে ফেলা যায়?


146

এটি একটি দ্বিগুণ বলে মনে হতে পারে তবে আশ্বাস রয়েছে যে এটি নয় - আমি আমার সমস্যার উত্তরের জন্য এসও পাশাপাশি বাকী ওয়েব উভয়কেই অনুসন্ধান করেছি এবং একইরকম অপর্যাপ্ত "সমাধান" খুঁজে পেয়েছি over যাইহোক, এখানে এটি যায়:

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

একটি নমুনা স্ট্রিং এর মতো দেখতে পারে:

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 "এর মতো ইওএল অক্ষর থাকে তবে আমি এটি দিয়ে আঘাত করব str_replace()বা এটি দিয়ে preg_replace()শেষ করে ফেলব, তবে সেখানে কোনও অক্ষর না থাকলে those ফাংশনগুলির যে কোনও একটিকে খাওয়ানোর জন্য আমার কোনও সুই দরকার নেই have প্রথম অবস্থানে.

আমি ডিবিতে প্রাসঙ্গিক ক্ষেত্রটি ম্যানুয়ালি অ্যাক্সেস করতে পারি, প্রতিটি লাইন ব্রেকের জন্য ব্যাকস্পেসে চাপুন এবং পরে আমি স্ট্রিংয়ের কাজটি করতে চাই। সুতরাং আমি জানি আমার উপরের ফর্ম্যাটটি দরকার।


যদি স্ট্রিংটি আপনার প্রথম উদাহরণের মতো দেখায়, তবে আপনি কীভাবে বলতে পারেন যে এতে কোনও লাইন ব্রেক চরিত্র নেই? এটি কমপক্ষে দু'টি পেয়েছে: পর পর পর দুটি "ধন্যবাদ!"
আর্নেস্ট ফ্রাইডম্যান-হিল

ফেয়ার এনফ @ আর্নেস্টফ্রিডম্যান-হিল, আপনি স্পষ্টতই ঠিক বলেছেন - সেখানে "কিছু" আছে, এটি কেবল আমার কাছে জানা কিছু নয় visible
জোহানেস পিল 25'12

লাইন ব্রেক ব্রেক অক্ষর ব্যতীত নতুন লাইন থাকা কীভাবে সম্ভব তা আমিও দেখতে পাচ্ছি না। আপনি স্ট্রিং পরিদর্শন করতে একটি হেক্স সম্পাদক ব্যবহার করতে পারেন - আমি নিশ্চিত যে আপনি নতুন রেখার জন্য অক্ষরগুলি খুঁজে পাবেন ...
নেটলেট

উত্তর:


376

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

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

যদিও \nচরিত্রগুলি প্রদর্শিত হচ্ছে না, আপনি যদি গাড়ীর রিটার্ন পান তবে সেখানে একটি অদৃশ্য চরিত্র রয়েছে। প্রিগ রিপ্লেসমেন্টগুলি সেগুলি দখল করে ঠিক করতে হবে।


অবিশ্বাস্য. আমি আপনার এবং @sbdnoobz জবাবগুলির লাইনে সবকিছু চেষ্টা করার শপথ করতে পারি, যা উভয়ই কাজ করে। ওহ ভাল, আমার যেই মানসিক অবরুদ্ধতা ছিল, আপনি উভয়েই আমাকে অনেক সময় বাঁচিয়েছিলেন। আমার মনে হয় বেশ ডিফল্ট প্রশ্ন হয়ে উঠেছে। ধন্যবাদ বন্ধুরা!
জোহানেস পিল 25'12

3
নোট করুন যে এটি সমস্ত লাইন ব্রেকগুলির সাথে মেলে না, যেমন উইন্ডোজ সিস্টেমে তৈরি। এগুলি ধরতে, আপনি পরিবর্তে নিম্নলিখিত RegEx ব্যবহার করতে পারেন/\r|\n|\r\n/
Toastrackenigma

6
ব্যবহারের \ r (যা ক্রম বিভক্তি কোনো লাইন প্রতিনিধিত্ব করে) stackoverflow.com/a/16274784/1491212
Armel Larcier

435

বেন এর সমাধান গ্রহণযোগ্য, কিন্তু str_replace () পর্যন্ত যতো তাড়াতাড়ি হয় preg_replace ()

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

কম সিপিইউ শক্তি ব্যবহার করে, বিশ্ব কার্বন ডাই অক্সাইড নিঃসরণ হ্রাস করে।


5
বিশ্বাস করা যায় না এই উত্তরটি আরও ক্রেডিট পায় না। প্রিগ_রেপ্লেস ()
পিমব্রউবার্স

62
গুরুত্বপূর্ণ: ক্যারেজ-রিটার্ন এবং নিউলাইন কোডগুলির আশেপাশে ডাবল কোটস ব্যবহার করুন। আপনি যদি একক উদ্ধৃতি ব্যবহার করেন তবে এগুলি সঠিকভাবে প্রক্রিয়া করা হবে না!
খোলসা

47
থাম্বস আপ -> "কম সিপিইউ শক্তি ব্যবহার করে বিশ্ব কার্বন ডাই অক্সাইড নির্গমন হ্রাস করে।"
জানুয়ারী

3
@ জোয়েরি: এই প্রথমটি কখনই ডাকবে না কারণ এটি প্রথম দুজন দ্বারা পরিচালিত হবে। এটি অপ্রয়োজনীয় কোড।
নাইটফক্স 89

4
@ জোয়েরি স্ট্র-রিপ্লেস বিবেচনা করে সমস্ত ঘটনা সরিয়ে ফেলবে , \ r এবং \ 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()নতুন লাইনগুলি একেবারে সরিয়ে দেয় না।

রিটার্নস সাথে STRING <br />বা <br> আগেই সন্নিবেশ সব নতুন লাইন ( \r\n, \n\r, \nএবং \r)।

str_replaceপরিবর্তে ব্যবহার করুন:

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

7

আপনি পিএইচপি ট্রিম ব্যবহার করতে পারেন

এই ফাংশনটি স্ট্রের প্রারম্ভিক এবং শেষে থেকে সাদা অংশের সাথে স্ট্রিং দেয়। দ্বিতীয় প্যারামিটার ছাড়াই, ছাঁটা () এই অক্ষরগুলি ফেলা করবে:

  • "" (ASCII 32 (0x20)), একটি সাধারণ স্থান।
  • "\ t" (ASCII 9 (0x09)), একটি ট্যাব।
  • "\ n" (ASCII 10 (0x0A)), একটি নতুন লাইন (লাইন ফিড)।
  • "\ r" (ASCII 13 (0x0D)), একটি ক্যারিজ রিটার্ন।
  • "\ 0" (ASCII 0 (0x00)), NUL-বাইট।
  • "\ 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 প্রতিস্থাপন করা সাহায্য করবে, কারণ এর মানে যদি লাইন ব্রেক হয় তবে প্রতিটি অংশের জন্য দু'জনের পরিবর্তে একটি কমা
মার্টিন

@ মার্টিন হ্যাঁ, আপনি ঠিক বলেছেন, আমি ঠিক এটিই বুঝতে পেরেছি, তাই আমরা \r\nপ্রথমে প্রতিস্থাপন করব , তারপরে আমরা প্রতিস্থাপন করব \rএবং \nআমি আমার উত্তর সম্পাদনা করেছি।
আজজাহ

এটি এখনও অপ্রয়োজনীয়, যদি আপনি সমস্তগুলি মুছে ফেলতে চলেছেন \rএবং \r, সরানোর কোনও প্রয়োজন নেই \r\n, আপনি str_replace(array("\r","\n"), "", $buffer);একই ফলাফল পেতে ব্যবহারকারীকে পারেন।
স্ট্রমিন

6

str_replace (PHP_EOL, নাল, $ str);


1
যদিও এটি প্রশ্নের উত্তর দিতে পারে t আপনার উত্তর সম্পর্কে কিছুটা ব্যাখ্যা করার পরামর্শ দেওয়া হচ্ছে।
অনিরুদ্ধ শর্মা

আপনি স্ট্রিং পড়লে 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.

এটি সেখানে বিভিন্ন ধরণের পাঠ্য ফাইল থেকে লাইন ব্রেকগুলি সরিয়ে ফেলতে পারে, তবে এইচটিএমএল হ্যান্ডেল করে না।


0

আমি এই কাজটি করতে 3 টি লাইন ব্যবহার করি, তাই " গুলিকে আপনার" স্টাফ "হিসাবে বিবেচনা করুন ...

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.