एक स्ट्रिंग के भीतर से अतिरिक्त व्हाट्सएप निकालें


132

मुझे डेटाबेस क्वेरी से एक स्ट्रिंग मिलती है, फिर मैं CSV फ़ाइल में डालने से पहले सभी HTML टैग्स, कैरिज रिटर्न और न्यूलाइन को हटा देता हूं। केवल एक चीज है, मैं बीच से अतिरिक्त सफेद स्थान को हटाने का कोई तरीका नहीं खोज सकता तार के ।

आंतरिक व्हाट्सएप पात्रों को हटाने का सबसे अच्छा तरीका क्या होगा?


6
कृपया, मूल स्ट्रिंग और वांछित स्ट्रिंग का एक नमूना पोस्ट करें।
Zote

क्या आप यह भी स्पष्ट कर सकते हैं कि अंतिम आउटपुट की आवश्यकता कैसे है? क्या आप CSV के लिए डेटा में अल्पविराम सम्मिलित कर रहे हैं, इसे पहले से अल्पविराम के साथ डेटाबेस से प्राप्त कर रहे हैं, स्ट्रिंग को एक फ़ंक्शन में खिला रहे हैं जो CSV प्रविष्टि आदि को संभालता है?
फ्रैंक डीरोसा

ठीक अंतिम पुट एक एकल व्हाट्सएप द्वारा अलग किए गए प्रत्येक शब्द के साथ एक स्ट्रिंग होने की आवश्यकता है, फिलहाल यह एक एकाधिक व्हाट्सएप है।
जोपोर

1
@ हाय, मैं समय बर्बाद नहीं करूँगा और उन सभी लोगों को श्रेय देना शुरू करूँगा जिन्होंने पहले आपकी मदद की है! :)
फ्रेंकी

जवाबों:


286

निश्चित रूप से नहीं कि आप क्या चाहते हैं, लेकिन यहां दो स्थितियां हैं:

  1. यदि आप whitespaceस्ट्रिंग के आरंभ या अंत में अतिरिक्त उपयोग कर रहे हैं trim(), तो आप इसका उपयोग कर सकते हैं ltrim()या rtrim()इसे हटा सकते हैं।

  2. यदि आप एक स्ट्रिंग के भीतर अतिरिक्त रिक्त स्थान के साथ काम कर रहे हैं preg_replace, तो कई पर विचार करेंwhitespaces " "* साथwhitespace " "

उदाहरण:

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

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

$foo = preg_replace( '/\s+/', ' ', $foo );के प्रभाव का उपयोग कर मार देंगेnl2br()
Waiyl करीम

1
preg_replace का उपयोग करने से पहले सिर्फ nl2br का उपयोग करें और आपको जाने के लिए अच्छा होना चाहिए।
लुकास एलिसिस

टाइपो / एस्कैपर नोट - यदि कोड आपके लिए अतिरिक्त व्हाट्सएप को नहीं हटाता है - सुनिश्चित करें कि आपके पास "s" से पहले "\" है: कुछ
ऑनलाइन-

यह सीएसएस सुरक्षित होना चाहिए, है ना? के रूप में, यह सुरक्षित रूप से एक लंबी, बहु-पंक्ति सीएसएस स्ट्रिंग को पकड़े हुए एक चर को संपीड़ित करेगा?
डेविड

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

या, अंडरस्कोर से बदलें, & nbsp; आदि आदि।


7
यह सभी व्हाट्सएप को दूर करता है। वह सिर्फ स्ट्रिंग को सामान्य करना चाहता है।
Svend

12
मैं (भले ही यह सवाल नहीं था) के लिए क्या देख रहा था
सात

@ गीगाला "आंतरिक व्हाट्सएप पात्रों को हटाने का सबसे अच्छा तरीका क्या होगा?" सवाल था। यह जवाब पूरी तरह से संतुष्ट करता है।
कोरी डी

1
@CoryDee यह सच है, उस अंतिम एकल वाक्य के लिए। लेकिन परिचय में, प्रश्न को " अतिरिक्त व्हाट्सएप" के रूप में दर्शाया गया है , जिसमें अतिरिक्त पर जोर दिया गया है। आपने ओपी की वास्तविक समस्या को पूरा किया, इसलिए यह ज्यादा मायने नहीं रखता है, लेकिन जब तक हम इसके बारे में तकनीकी हो रहे हैं ...
स्पेन्सर रस्किन

यह अगर काम नहीं करता है गिनती के रिक्त स्थान है सम संख्या :, मान लीजिए 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+। हालांकि यह 2014 में वापस आ गया था, इसलिए शायद इसे बदल दिया गया है, पिछले 3 वर्षों से PHP को छुआ नहीं है, टिप्पणी नहीं कर सकता है लेकिन वर्तमान उत्तर छोड़ देगा जबकि यह एक समाधान था और अभी भी कुछ मामलों में हो सकता है।
लुकास लेइसिस

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

यदि आप उपयोगकर्ता इनपुट [या अन्य अविश्वसनीय स्रोतों] से पेलोड प्राप्त करते हैं, तो preg_replace () का उपयोग करने के लिए सुरक्षा दोष हैं। PHP निष्कासन () के साथ नियमित अभिव्यक्ति को निष्पादित करता है। यदि आने वाली स्ट्रिंग को ठीक से साफ नहीं किया गया है, तो आपके आवेदन जोखिम कोड इंजेक्शन के अधीन हैं ।

अपने स्वयं के अनुप्रयोग में, इनपुट को सैनिटाइज़ करने में परेशान करने के बजाय (और जैसा कि मैं केवल छोटे तारों से निपटता हूं), मैंने इसके बजाय थोड़ा अधिक प्रोसेसर गहन कार्य किया, हालांकि जो सुरक्षित है, क्योंकि यह कुछ भी नहीं निकालता है ()।

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/ पर यह निर्दिष्ट करते हैं कि यह निष्कासन का उपयोग करता है, तो यह भी कहता है कि "यह सुविधा PHP 5.5.0 में निर्धारित की गई थी, और PHP 7.0.0 के रूप में बनाई गई थी। " तो आप अब preg_replace में सामान नहीं निकाल सकते।
ADJenks 20


2

आप उपयोग कर सकते हैं:

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

यह स्ट्रिंग के दोनों किनारों से अतिरिक्त व्हाट्सएप को हटाता है और स्ट्रिंग के भीतर दो रिक्त स्थान को एक में परिवर्तित करता है । ध्यान दें कि यह एक पंक्ति में तीन या अधिक स्थानों को एक में नहीं बदलेगा! एक और तरीका है जो मैं सुझा सकता हूं कि यह इम्प्लांट और एक्सप्लोड का उपयोग है जो सुरक्षित है लेकिन पूरी तरह से इष्टतम नहीं है!

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

मेरा सुझाव इस तरह का काम करने के लिए देशी का उपयोग कर रहा है या रेगेक्स का उपयोग कर रहा है।


यह कई स्थानों को सही ढंग से परिवर्तित नहीं करता है जहां अंतरिक्ष दो स्थानों से अधिक लंबा है।
22

1

संदीप के जवाब पर विस्तार करने के लिए, मेरे पास उन लॉग का एक गुच्छा था, जो लॉग में दिखाई दे रहे थे, जो गलत तरीके से कोडित थे। उनका मतलब सिर्फ यूआरएल को कोड करना था, लेकिन एक स्पेस के बाद ट्विटर हैंडल और कुछ अन्य सामान रखना था। ऐसा लग रहा था

? productID =26%20via%20@LFS

आम तौर पर, यह एक समस्या नहीं होगी, लेकिन मुझे बहुत सारे एसक्यूएल इंजेक्शन के प्रयास मिल रहे हैं, इसलिए मैं ऐसी किसी भी चीज़ को पुनर्निर्देशित करता हूं, जो 404 की वैध आईडी नहीं है। मैंने अवैध उत्पादआईडी स्ट्रिंग को बनाने के लिए preg_replace पद्धति का उपयोग किया था। वैध उत्पाद।

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

मैं URL में एक स्थान की तलाश करता हूं और फिर उसके बाद सब कुछ हटा देता हूं।


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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.