একটি স্ট্রিংয়ের মধ্যে থেকে অতিরিক্ত হোয়াইটস্পেস সরান


132

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

অভ্যন্তরীণ শ্বেতক্ষেত্রের অক্ষরগুলি সরানোর সর্বোত্তম উপায় কী হবে?


6
দয়া করে আসল স্ট্রিংয়ের একটি নমুনা পোস্ট করুন এবং স্ট্রিং চেয়েছিলেন।
জোট

চূড়ান্ত আউটপুট কীভাবে হওয়া দরকার তাও আপনি পরিষ্কার করতে পারেন? আপনি কি CSV- র ডেটাতে কমাগুলি ,োকাচ্ছেন, এটি ইতিমধ্যে কমা সহ একটি ডাটাবেস থেকে পেয়েছেন, কোনও ফাংশনে স্ট্রিংগুলি খাওয়ান যা CSV সন্নিবেশ ইত্যাদি পরিচালনা করে?
ফ্রাঙ্ক ডিরোসা

ঠিক আছে চূড়ান্ত আউট পুটটি প্রতিটি শব্দের সাথে একটি শ্বেত স্পেস দ্বারা পৃথক করা স্ট্রিং হওয়া দরকার, এই মুহুর্তে এটি একাধিক সাদা স্থান রয়েছে।
জয়পুর

1
@ জো, আমি সময় নষ্ট করব না এবং যারা আপনাকে আগে সহায়তা করেছে তাদের সবাইকে creditণ দেওয়া শুরু করব! :)
ফ্রাঙ্কি

উত্তর:


286

আপনি ঠিক কী চান তা নিশ্চিত নন তবে এখানে দুটি পরিস্থিতি রয়েছে:

  1. যদি আপনি কেবল whitespaceস্ট্রিংয়ের শুরু বা শেষের দিকে অতিরিক্ত ব্যবহার করছেন তবে আপনি এটি ব্যবহার করতে পারেন trim(), ltrim()বা rtrim()এটি সরাতে।

  2. যদি আপনি স্ট্রিংয়ের মধ্যে অতিরিক্ত স্পেসগুলি নিয়ে কাজ করে থাকেন তবে একক সাথে preg_replaceএকাধিক বিবেচনা করুন ।whitespaces " "*whitespace " "

উদাহরণ:

$foo = preg_replace('/\s+/', ' ', $foo);

62
oo foo = প্রেগ_রেপ্লেস ('/ \ s + /', '', $ ফু);
জিনিও

ব্যবহার $foo = preg_replace( '/\s+/', ' ', $foo );প্রভাব হত্যা করবেnl2br()
Waiyl করিম

1
preg_replace ব্যবহারের আগে কেবল nl2br ব্যবহার করুন এবং আপনার ভাল হওয়া উচিত।
লুকাস লাইসিস

টাইপো / এসকর্ট নোট - যদি কোডটি আপনার জন্য অতিরিক্ত শ্বেত স্থান অপসারণ না করে - আপনার "s" "এস" এর আগে রয়েছে তা নিশ্চিত করুন :) কিছু অনলাইন-পিএইচপি-পরীক্ষামূলক পৃষ্ঠা এটি মুছে
ফেলেছে

এটি সিএসএস নিরাপদ হওয়া উচিত, তাই না? হিসাবে, এটি একটি দীর্ঘ, বহু-লাইন সিএসএস স্ট্রিং ধারণ করে একটি ভেরিয়েবলকে নিরাপদে সঙ্কুচিত করবে?
ডেভিড

50
$str = str_replace(' ','',$str);

বা, আন্ডারস্কোর দিয়ে প্রতিস্থাপন করুন, & nbsp; ইত্যাদি ইত্যাদি


7
এটি সমস্ত সাদা স্থান সরিয়ে দেয়। তিনি কেবল স্ট্রিংটি স্বাভাবিক করতে চান।
Svend

12
আমি যা খুঁজছিলাম (যদিও এটি প্রশ্ন ছিল না)
সেরিয়ারনেথস

@ জিগালা "অভ্যন্তরীণ শ্বেতক্ষেত্রের অক্ষরগুলি সরিয়ে দেওয়ার সর্বোত্তম উপায় কী হবে?" প্রশ্ন ছিল। এই উত্তর পুরোপুরি সন্তুষ্ট।
কোরি ডি

1
@ কোরিডি এটি শেষ, একক বাক্যটির জন্য সত্য। তবে সূচনায় প্রশ্নটির অতিরিক্ত হিসাবে জোর দিয়ে " অতিরিক্ত সাদা অংশ" হিসাবে চিহ্নিত করা হয়। আপনি ওপির বাস্তব সমস্যা সন্তুষ্ট করে শেষ করেছেন, সুতরাং এটি কোনও তাত্পর্যপূর্ণ নয়, তবে যতক্ষণ না আমরা এটি সম্পর্কে প্রযুক্তিগত হয়ে যাচ্ছি ...
স্পেনসার রুসকিন

এই যদি কাজ না করে গণনা এর স্পেস হয় জোড় সংখ্যা : বলে দিন Hi Earth4 শূণ্যস্থান মধ্যে হয়ে যাবে: HiEarth। এটি আমার সমস্যার সাথে প্রাসঙ্গিক সমাধান করে না।
জেজে লাবাজো

26

$str = trim(preg_replace('/\s+/',' ', $str));

উপরের কোডের লাইনটি অতিরিক্ত স্থানগুলি সরিয়ে দেবে , পাশাপাশি শীর্ষস্থানীয় এবং পিছনের স্থানগুলি সরিয়ে দেবে।


25

অন্য কোনও উদাহরণই আমার পক্ষে কাজ করেনি, তাই আমি এটি ব্যবহার করেছি:

trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))

এটি সমস্ত ট্যাব, নতুন লাইন, ডাবল স্পেস ইত্যাদিকে সাধারণ 1 স্পেসে প্রতিস্থাপন করে।


ধন্যবাদ, @ wp78de তবে কোনও কারণে, আমার সাথে ন্যায়সঙ্গত সমস্যা ছিল \s+। যদিও এটি ২০১৪ সালে ফিরে এসেছিল তাই সম্ভবত এটি পরিবর্তিত হয়েছে, গত ৩ বছর পিএইচপি স্পর্শ করেনি, মন্তব্য করতে পারে না তবে বর্তমান উত্তরটি ছেড়ে দেবে যখন এটি একটি সমাধান ছিল এবং এখনও কিছু ক্ষেত্রে হতে পারে।
লুকাস লিসিস 12:58

9

আপনি যদি স্ট্রিংয়ে কেবলমাত্র একাধিক স্পেস প্রতিস্থাপন করতে চান, উদাহরণস্বরূপ: "this string have lots of space . " এবং আপনি উত্তরটি প্রত্যাশা করছেন "this string have lots of space", আপনি নিম্নলিখিত সমাধানটি ব্যবহার করতে পারেন:

$strng = "this string                        have lots of                        space  .   ";

$strng = trim(preg_replace('/\s+/',' ', $strng));

echo $strng;

5

প্রিগ_রেপ্লেস () ব্যবহার করার ক্ষেত্রে সুরক্ষা ত্রুটি রয়েছে, যদি আপনি ব্যবহারকারীর ইনপুট [বা অন্যান্য অবিশ্বস্ত উত্স] থেকে পেডলোড পান। পিএইচপি নিয়মিত এক্সপ্রেশন কার্যকর করে eval () দিয়ে। যদি আগত স্ট্রিংটি সঠিকভাবে স্যানিটাইজ করা না হয় তবে আপনার অ্যাপ্লিকেশনটি কোড ইঞ্জেকশনের শিকার হওয়ার ঝুঁকিপূর্ণ ।

আমার নিজের অ্যাপ্লিকেশনটিতে, ইনপুটটিকে স্যানিটাইজিং বিরক্ত করার পরিবর্তে (এবং যেমন আমি কেবল ছোট ছোট স্ট্রিংয়ের সাথে ডিল করি) পরিবর্তে আমি কিছুটা প্রসেসরের নিবিড় ফাংশন তৈরি করেছিলাম, যদিও এটি সুরক্ষিত, কারণ এটি কিছুই প্রকাশ করে না ()।

function secureRip(string $str): string { /* Rips all whitespace securely. */
  $arr = str_split($str, 1);
  $retStr = '';
  foreach ($arr as $char) {
    $retStr .= trim($char);
  }
  return $retStr;
}

আপনি কেবলমাত্র 'ই' সংশোধক: php.net/manual/en/… নির্দিষ্ট করলে এটি কেবল এটি ব্যবহার করেই সম্পাদন করে এটি এটিতে এটিও বলেছে যে "এই বৈশিষ্ট্যটি পিএইচপি 5.5.0-এ অপসারণ করা হয়েছিল, এবং পিএইচপি 7.0.0 থেকে সরানো হয়েছিল। " সুতরাং আপনি আর পূর্ববর্তী স্থানগুলিতে স্টাফ খুলতে পারবেন না।
এডিজেঙ্কস


2

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

$str = trim(str_replace("  ", " ", $str));

এটি স্ট্রিংয়ের উভয় দিক থেকে অতিরিক্ত হোয়াইটস্পেসগুলি সরিয়ে দেয় এবং দুটি স্পেস স্ট্রিংয়ের মধ্যে একটিতে রূপান্তর করে। নোট করুন যে এটি এক সারিতে তিন বা ততোধিক স্থানকে রূপান্তর করবে না! আমি প্রস্তাব করতে পারি যে অন্য উপায়টি ইমপ্লোড এবং বিস্ফোরকটি ব্যবহার করা নিরাপদ তবে সম্পূর্ণরূপে সর্বোত্তম নয়!

$str = implode(" ", array_filter(explode(" ", $str)));

আমার পরামর্শটি লুপের জন্য নেটিভ ব্যবহার করা বা এই ধরণের কাজ করার জন্য রেজেক্স ব্যবহার করা।


যেখানে স্থান দুটি জায়গার চেয়ে দীর্ঘ হয় সেখানে এটি একাধিক স্পেসকে সঠিকভাবে রূপান্তরিত করে না।
মাইকাইবেক

1

সন্দীপের উত্তরটি প্রসারিত করার জন্য, আমার কাছে বিট.লিতে ভুল কোডে থাকা লগগুলিতে একটি স্ট্রিংগুলি উপস্থিত ছিল had তারা কেবলমাত্র ইউআরএল কোড করতে বোঝায় তবে একটি স্থানের পরে একটি টুইটার হ্যান্ডেল এবং কিছু অন্যান্য জিনিস রাখে। দেখে মনে হচ্ছিল

? productID =26%20via%20@LFS

সাধারণত, এটি কোনও সমস্যা হবে না তবে আমি প্রচুর এসকিউএল ইঞ্জেকশন চেষ্টা করছি, তাই আমি কোনও বৈধ আইডি নয় এমন কোনও 403 টি পুনর্নির্দেশ করি I আমি অবৈধ প্রোডাক্ট আইডি স্ট্রিংটিকে একটি রূপান্তর করতে প্রিগ_রেপল পদ্ধতি ব্যবহার করেছি I বৈধ productID।

$productID=preg_replace('/[\s]+.*/','',$productID);

আমি ইউআরএলটিতে একটি স্থান অনুসন্ধান করি এবং তারপরে সমস্ত কিছু সরিয়ে ফেলি।


0

আমি সম্প্রতি একটি সাধারণ ফাংশন লিখেছি যা নিয়মিত প্রকাশ ছাড়াই অতিরিক্ত সাদা স্থানকে স্ট্রিং থেকে সরিয়ে দেয় implode(' ', array_filter(explode(' ', $str)))


-1
$str = "I      am a PHP   Developer";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
   if (isset($str_arr[$i + 1])  && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) {
       unset($str_arr[$i]);
   } 
   else {
     continue;
   }
}
echo implode("", $str_arr);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.