PHP: एक स्ट्रिंग में सभी गैर प्रिंट करने योग्य वर्ण कैसे निकालें?


160

मुझे लगता है कि मुझे चार्ट को हटाने की आवश्यकता है 0-31 और 127,

क्या इसे कुशलतापूर्वक करने के लिए कोई फ़ंक्शन या कोड का टुकड़ा है।

जवाबों:


354

7 बिट ASCII?

यदि आपकी तारदिस बस 1963 में उतरी, और आप बस 7 बिट प्रिंट करने योग्य ASCII चार्ट चाहते हैं, तो आप 0-31 और 127-255 से सब कुछ चीर सकते हैं:

$string = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $string);

यह 0-31, 127-255 में कुछ भी मेल खाता है और इसे हटा देता है।

8 बिट विस्तारित ASCII?

आप हॉट टब टाइम मशीन में गिर गए, और आप अस्सी के दशक में वापस आ गए। यदि आपको 8 बिट ASCII का कुछ रूप मिला है, तो आप वर्णों को 128-255 की सीमा में रखना चाह सकते हैं। एक आसान समायोजन - बस 0-31 और 127 की तलाश करें

$string = preg_replace('/[\x00-\x1F\x7F]/', '', $string);

UTF-8?

आह, 21 वीं सदी में आपका स्वागत है। यदि आपके पास UTF-8 एन्कोडेड स्ट्रिंग है, तो /u संशोधक को रेगेक्स पर उपयोग किया जा सकता है

$string = preg_replace('/[\x00-\x1F\x7F]/u', '', $string);

यह सिर्फ 0-31 और 127 को हटाता है। यह ASCII और UTF-8 में काम करता है क्योंकि दोनों एक ही नियंत्रण सेट सीमा (जैसा कि नीचे mgutt द्वारा दिया गया है) साझा करते हैं। कड़े शब्दों में, यह /uसंशोधक के बिना काम करेगा । लेकिन यह जीवन को आसान बनाता है यदि आप अन्य वर्णों को हटाना चाहते हैं ...

यदि आप यूनिकोड के साथ काम कर रहे हैं, तो हैं संभावित रूप से कई गैर-मुद्रण तत्व हैं , लेकिन आइए एक सरल पर विचार करें: NO-BREAK SPACE (U + 00A0)

UTF-8 स्ट्रिंग में, इसे एन्कोड किया जाएगा 0xC2A0। आप उस विशिष्ट अनुक्रम को देख सकते हैं और हटा सकते हैं, लेकिन /uस्थान में संशोधक के साथ , आप बस \xA0वर्ण वर्ग में जोड़ सकते हैं :

$string = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $string);

परिशिष्ट: str_replace के बारे में क्या?

preg_replace बहुत कुशल है, लेकिन यदि आप इस ऑपरेशन को बहुत अधिक कर रहे हैं, तो आप अपने द्वारा हटाए जाने वाले वर्णों की एक सरणी का निर्माण कर सकते हैं, और str_replace का उपयोग नीचे दिए गए mgutt द्वारा किया जा सकता है, जैसे।

//build an array we can re-use across several operations
$badchar=array(
    // control characters
    chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10),
    chr(11), chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20),
    chr(21), chr(22), chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30),
    chr(31),
    // non-printing characters
    chr(127)
);

//replace the unwanted chars
$str2 = str_replace($badchar, '', $str);

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

     2 chars str_replace     5.3439ms preg_replace     2.9919ms preg_replace is 44.01% faster
     4 chars str_replace     6.0701ms preg_replace     1.4119ms preg_replace is 76.74% faster
     8 chars str_replace     5.8119ms preg_replace     2.0721ms preg_replace is 64.35% faster
    16 chars str_replace     6.0401ms preg_replace     2.1980ms preg_replace is 63.61% faster
    32 chars str_replace     6.0320ms preg_replace     2.6770ms preg_replace is 55.62% faster
    64 chars str_replace     7.4198ms preg_replace     4.4160ms preg_replace is 40.48% faster
   128 chars str_replace    12.7239ms preg_replace     7.5412ms preg_replace is 40.73% faster
   256 chars str_replace    19.8820ms preg_replace    17.1330ms preg_replace is 13.83% faster
   512 chars str_replace    34.3399ms preg_replace    34.0221ms preg_replace is  0.93% faster
  1024 chars str_replace    57.1141ms preg_replace    67.0300ms str_replace  is 14.79% faster
  2048 chars str_replace    94.7111ms preg_replace   123.3189ms str_replace  is 23.20% faster
  4096 chars str_replace   227.7029ms preg_replace   258.3771ms str_replace  is 11.87% faster
  8192 chars str_replace   506.3410ms preg_replace   555.6269ms str_replace  is  8.87% faster
 16384 chars str_replace  1116.8811ms preg_replace  1098.0589ms preg_replace is  1.69% faster
 32768 chars str_replace  2299.3128ms preg_replace  2222.8632ms preg_replace is  3.32% faster

10000 पुनरावृत्तियों के लिए समय स्वयं हैं, लेकिन जो अधिक दिलचस्प है वह सापेक्ष अंतर है। 512 चरस तक, मैं प्रीग_रेप्ले को हमेशा जीतता हुआ देख रहा था। 1-8kb रेंज में, str_replace में मामूली बढ़त थी।

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


14
यदि आपको एक नई रूपरेखा पर विचार करने की आवश्यकता है, तो अभिव्यक्ति को इस पर बदलें (प्रिंटर्स के लिए विपरीत रूप से खोजें): preg_replace (/ [[^ \ x0A \ x20- \ x7E] /, '', $ string);
निक

12
@ डैलिन "UTF-8 चरित्र" जैसी कोई चीज नहीं है। यूनिकोड प्रतीक / वर्ण हैं, और UTF-8 एक एन्कोडिंग है जो उन सभी का प्रतिनिधित्व कर सकता है। आपके कहने का अर्थ है कि यह ASCII वर्ण सेट के बाहर के वर्णों के लिए काम नहीं करता है।
मथियास ब्यनेंस

3
यदि आपको \ xFF से ऊपर एक यूनिकोड वर्ण का मिलान करने की आवश्यकता है, तो \ x {####}
पीटर ओल्सन

आप मि। x7F (127) से चूक गए जो कि एक गैर-मुद्रण योग्य चरित्र है
मुबाशर

यह अरबी पत्रों को हटा देगा, बुरा समाधान।
अयमान हुसैन

141

यहां कई अन्य उत्तर यूनिकोड वर्ण (जैसे öäüȝîûηйȝîûηы ე ⠛। மி) को ध्यान में नहीं रखते हैं। इस मामले में आप निम्नलिखित का उपयोग कर सकते हैं:

$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/u', '', $string);

श्रेणी में वर्णों का एक अजीब वर्ग है (वर्णों \x80-\x9Fके 7-बिट ASCII श्रेणी के ऊपर) जो तकनीकी रूप से नियंत्रण वर्ण हैं, लेकिन समय के साथ मुद्रण योग्य वर्णों का दुरुपयोग किया गया है। यदि आपको इनसे कोई समस्या नहीं है, तो आप इसका उपयोग कर सकते हैं:

$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/u', '', $string);

यदि आप स्ट्रिप लाइन फीड्स, कैरिज रिटर्न, टैब्स, नॉन-ब्रेकिंग स्पेस और सॉफ्ट-हाइफ़न भी प्राप्त करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

$string = preg_replace('/[\x00-\x1F\x7F-\xA0\xAD]/u', '', $string);

ध्यान दें कि आपको चाहिए उपरोक्त उदाहरणों के लिए एकल उद्धरणों का उपयोग ।

यदि आप मूल मुद्रण योग्य ASCII वर्णों को छोड़कर सब कुछ छीनना चाहते हैं (ऊपर दिए गए सभी उदाहरण वर्णों को छीन लिया जाएगा)

$string = preg_replace( '/[^[:print:]]/', '',$string);

संदर्भ के लिए देखें http://www.fileformat.info/info/charset/UTF-8/list.htm


1
आपका regexp UTF8 वर्णों को ठीक से संभालता है; लेकिन यह गैर-UTF8 "विशेष" वर्णों को स्ट्रिप्स करता है; ç, ü और ö की तरह।'/[\x00-\x1F\x80-\xC0]/u'उन्हें बरकरार रखता है; लेकिन यह भी विभाजन (F7) और गुणा (D7) संकेत है।
हज़ार

@ हज़ार हाँ आप सही हैं \ x80- \ xFF बहुत अधिक छीन लिया गया है, लेकिन \ x80- \ xC0 अभी भी प्रतिबंधात्मक है। यह अन्य मुद्रण योग्य पात्रों को याद करेगा जैसे © £ able। संदर्भ के लिए utf8-chartable.de
Dalin

1
@TimMalone क्योंकि PHP उन वर्ण अनुक्रमों का विस्तार करेगा: php.net/manual/en/… ताकि regex उस सीमा को नहीं देखेगा जिसके बारे में आप यह बताने की कोशिश कर रहे हैं।
डालिन

1
7F के बारे में क्या? क्या यह नहीं होना चाहिए \x7F-\x9F?
बेल

1
मैंने अभी बहुत कोशिश की, मैंने PHP में उपलब्ध हर एन्कोडिंग फंक्शन को regex से mb_ से htmlspecialchars आदि पर आज़माया। कुछ भी नहीं कंट्रोल कैरेक्टर्स को हटा दिया, काम करने के लिए धन्यवाद।
जॉन

29

PHP 5.2 से शुरू होने पर, हमारे पास filter_var तक पहुंच भी है, जिसे मैंने किसी भी विचार का उल्लेख नहीं देखा है, मैं इसे वहां फेंक दूंगा। गैर-मुद्रण योग्य वर्णों को हटाने के लिए फ़िल्टर_वर का उपयोग करने के लिए <32 और> 127, आप कर सकते हैं:

32 से नीचे ASCII वर्ण फ़िल्टर करें

$string = filter_var($input, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW);

फ़िल्टर ASCII वर्ण 127 से ऊपर

$string = filter_var($input, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_HIGH);

दोनों पट्टी:

$string = filter_var($input, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH);

उच्चतर स्ट्रिपिंग करते समय आप कम अक्षरों (न्यूलाइन, टैब आदि) को भी एनकोड कर सकते हैं:

$string = filter_var($input, FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_LOW|FILTER_FLAG_STRIP_HIGH);

HTML को अलग करने के लिए भी विकल्प हैं, ई-मेल और URL को सैनिटाइज़ करना, इत्यादि।, सैनिटाइजेशन के लिए बहुत सारे विकल्प (स्ट्रिप आउट डेटा) और यहां तक ​​कि मान्यता (चुपचाप अलग करने के बजाय वैध नहीं होने पर वापस लौटें)।

स्वच्छता: http://php.net/manual/en/filter.filters.sanitize.php

मान्यता: http://php.net/manual/en/filter.filters.validate.php

हालाँकि, अभी भी समस्या है, कि FILTER_FLAG_STRIP_LOW नई लाइन और कैरिज रिटर्न को छीन लेगा, जो कि एक textarea के लिए पूरी तरह से मान्य वर्ण हैं ... इसलिए रेगेक्स के कुछ उत्तर, मुझे लगता है, इस समय की समीक्षा के बाद भी आवश्यक हैं, जैसे धागा, मैं textareas के लिए यह करने की योजना:

$string = preg_replace( '/[^[:print:]\r\n]/', '',$input);

यह संख्यात्मक रेंज द्वारा छीन ली गई कई संख्याओं से अधिक पठनीय लगता है।



18

यह सरल है:

$ string = preg_replace ('/ [[[: cntrl:]] /', '', $ string);


5
यह स्ट्रिप्स लाइन फीड्स, कैरिज रिटर्न और UTF8 अक्षर भी देता है।
दलिन

5
@ डैलिन "UTF-8 चरित्र" जैसी कोई चीज नहीं है। यूनिकोड प्रतीक / वर्ण हैं, और UTF-8 एक एन्कोडिंग है जो उन सभी का प्रतिनिधित्व कर सकता है। आपके कहने का मतलब यह है कि ASCII रेंज के बाहर के स्ट्रिप्स अक्षर भी।
मथियास ब्यनेंस

1
अरबी पात्रों को खाती है :)
रॉल्फ

16

समाधान के सभी आंशिक रूप से काम करते हैं, और नीचे भी शायद सभी मामलों को कवर नहीं करते हैं। मेरा मुद्दा utf8 mysql तालिका में एक स्ट्रिंग डालने की कोशिश में था। स्ट्रिंग (और उसके बाइट्स) सभी utf8 के अनुरूप थे, लेकिन कई बुरे क्रम थे। मुझे लगता है कि उनमें से ज्यादातर नियंत्रण या स्वरूपण थे।

function clean_string($string) {
  $s = trim($string);
  $s = iconv("UTF-8", "UTF-8//IGNORE", $s); // drop all non utf-8 characters

  // this is some bad utf-8 byte sequence that makes mysql complain - control and formatting i think
  $s = preg_replace('/(?>[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF])/', ' ', $s);

  $s = preg_replace('/\s+/', ' ', $s); // reduce all multiple whitespace to a single space

  return $s;
}

समस्या को और अधिक बढ़ा देने के लिए तालिका बनाम सर्वर बनाम कनेक्शन बनाम सामग्री का प्रतिपादन, जैसा कि यहां थोड़ा बताया गया है


1
केवल वही है जो मेरी सभी यूनिट परीक्षणों को पारित करता है, भयानक!
कोरी

\ xE2 \ x80 [\ xA4- \ xA8] (या 226.128। [164-168]) - गलत है, अनुक्रम में अगले प्रिंट करने योग्य प्रतीक शामिल हैं: यूनिकोड कैरेक्टर 'वन डॉट लीडर' (यू + 2024), यूनिकोड कैरेक्टर 'TWO DOT। लीडर '(U + 2025), यूनिकोड कैरेक्टर' HORIZONTAL ELLIPSIS '(U + 2026), यूनिकोड कैरेक्टर' HYPHENATION POINT '(U + 2027)। और केवल एक गैर-मुद्रण योग्य: यूनिकोड चरित्र 'लाइन SEPARATOR' (U + 2028)। अगला एक गैर-मुद्रण योग्य भी है: यूनिकोड कैरेक्टर 'PARAGRAPH SEPARATOR' (U + 2029)। इसलिए LINE SEPARATOR और PARAGRAPER SEPARATOR को निकालने के लिए अनुक्रम को प्रतिस्थापित करें: \ xE2 \ x80 [\ xA8- \ xA9] \ xE2 \ x80 [\ xA8- \ xA9] के साथ।
मिंगलेवएमई

यह सबसे अच्छा समाधान है जो मुझे अब तक मिल सकता है, लेकिन मुझे लेस्सो को जोड़ना पड़ा $s = preg_replace('/(\xF0\x9F[\x00-\xFF][\x00-\xFF])/', ' ', $s);क्योंकि सभी इमोजी पात्रों को मैस्कल गड़बड़ कर रहे थे
जो ब्लैक

9

मेरा UTF-8 अनुपालन संस्करण:

preg_replace('/[^\p{L}\s]/u','',$value);


7
यह अच्छी तरह से उद्धरण, कोष्ठक, आदि जैसे वर्णों को हटाते हैं।
गजस

यह अद्भुत है! इसने मेरे जीवन को बचाया, अरबी पात्रों को छापते समय गड़बड़ कर दिया, विजेता की तरह काम किया :)
krishna

6

आप उन पात्रों के अलावा सब कुछ हटाने के लिए एक नियमित एक्सप्रेस का उपयोग कर सकते हैं जिन्हें आप रखना चाहते हैं:

$string=preg_replace('/[^A-Za-z0-9 _\-\+\&]/','',$string);

जो कुछ नहीं है (^) अक्षर AZ या az, संख्या 0-9, स्थान, अंडरस्कोर, हाइपेन, प्लस और एम्परसेंड - जो कुछ भी नहीं है (यानी इसे हटा दें) को प्रतिस्थापित करता है।


5
preg_replace('/(?!\n)[\p{Cc}]/', '', $response);

इससे सभी नियंत्रण वर्ण ( http://uk.php.net/manual/en/regexp.reference.unicode.php ) \nनए वर्णों को छोड़ देंगे । मेरे अनुभव से, नियंत्रण वर्ण वे हैं जो अक्सर मुद्रण मुद्दों का कारण बनते हैं।


1
यह मेरे लिए एकदम सही काम करता है! मैंने केवल /uUTF-8 वर्णों के लिए जोड़ा । क्या आप बता सकते हैं कि पहला भाग (?!\n)क्या करता है?
मार्सियो माजूकाटो

4

इनपुट स्ट्रिंग से सभी गैर-एएससीआईआई पात्रों को छीनने के लिए

$result = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

यह कोड हेक्स श्रेणी 0-31 और 128-255 में किसी भी वर्ण को हटाता है, जिसके परिणामस्वरूप स्ट्रिंग में केवल हेक्स वर्ण 32-127 है, जिसे मैं इस उदाहरण में $ परिणाम कहता हूं।


3

@PaulDixon का जवाब है पूरी तरह से गलत है क्योंकि यह, प्रिंट करने योग्य निकालता है विस्तारित ASCII वर्ण 128-255!आंशिक रूप से ठीक किया गया है। मुझे नहीं पता कि वह अभी भी 127 चट 7 बी-बिट एएससीआईआई सेट से 128-255 को हटाना चाहता है क्योंकि इसमें विस्तारित एएससीआईआई अक्षर नहीं है।

लेकिन आखिरकार यह महत्वपूर्ण था कि 128-255 को डिलीट न करें क्योंकि उदाहरण के लिए chr(128)( \x80) 8-बिट ASCII में यूरो साइन है और विंडोज में कई UTF-8 फोंट एक यूरो साइन और एंड्रॉइड को मेरे स्वयं के परीक्षण के बारे में प्रदर्शित करते हैं

और यदि आप एक UTF-8 स्ट्रिंग (शायद एक मल्टी-बाइट UTF-8 वर्ण के शुरुआती बाइट्स) से ASCII वर्ण 128-255 निकालते हैं तो यह कई UTF-8 वर्णों को मार देगा। तो ऐसा मत करो! वे वर्तमान में उपयोग की गई सभी फ़ाइल सिस्टम में पूरी तरह से कानूनी पात्र हैं। एकमात्र आरक्षित सीमा 0-31 है

इसके बजाय गैर-मुद्रण योग्य वर्णों को हटाने के लिए इसका उपयोग करें 0-31 और 127:

$string = preg_replace('/[\x00-\x1F\x7F]/', '', $string);

यह ASCII और UTF-8 में काम करता है क्योंकि दोनों एक ही नियंत्रण सेट सीमा को साझा करते हैं ।

सबसे तेजी से नियमित अभिव्यक्ति का उपयोग किए बिना slower¹ विकल्प:

$string = str_replace(array(
    // control characters
    chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10),
    chr(11), chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20),
    chr(21), chr(22), chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30),
    chr(31),
    // non-printing characters
    chr(127)
), '', $string);

यदि आप सभी व्हाट्सएप पात्रों को रखना चाहते हैं \t, \nऔर \r, तो इस सूची से हटा दें chr(9), chr(10)और chr(13)। नोट: सामान्य व्हाट्सएप chr(32)इसलिए है कि यह परिणाम में रहता है। अपने आप को तय करें कि क्या आप गैर-ब्रेकिंग स्पेस को हटाना चाहते हैं chr(160)क्योंकि यह समस्याएं पैदा कर सकता है।

¹ @PaulDixon द्वारा परीक्षण किया गया और स्वयं द्वारा सत्यापित किया गया।


2

कैसा रहेगा:

return preg_replace("/[^a-zA-Z0-9`_.,;@#%~'\"\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-\s\\\\]+/", "", $data);

मुझे जो मैं शामिल करना चाहता हूं उसका पूरा नियंत्रण देता है


0

अंकित anwser सही है, लेकिन यह चरित्र 127 (DEL) को याद करता है जो एक गैर-मुद्रण योग्य चरित्र भी है

मेरा जवाब होगा

$string = preg_replace('/[\x00-\x1F\x7f-\xFF]/', '', $string);

यह उत्तर भी गलत है। देखें: stackoverflow.com/a/42058165/318765
mgutt

उपरोक्त उत्तर मूल उत्तर के लिए एक तारीफ थी जो केवल "डिलीट" पात्र को जोड़ता है।
मुबाशर

0

"सीडिवैड" ने स्वीडिश वर्णों के लगातार परिणाम के साथ मेरे लिए इस मुद्दे को हल किया "।

$text = preg_replace( '/[^\p{L}\s]/u', '', $text );

धन्यवाद!


0

किसी के लिए जो अभी भी गैर-मुद्रण योग्य वर्णों को हटाने के बिना ऐसा करने के लिए देख रहा है, बल्कि उनसे बचकर, मैंने इसे मदद करने के लिए बनाया है। इसे सुधारने के लिए स्वतंत्र महसूस करें! अक्षर \\ x [A-F0-9] [A-F0-9] से बच जाते हैं।

ऐसे करें कॉल:

$escaped = EscapeNonASCII($string);

$unescaped = UnescapeNonASCII($string);

<?php 
  function EscapeNonASCII($string) //Convert string to hex, replace non-printable chars with escaped hex
    {
        $hexbytes = strtoupper(bin2hex($string));
        $i = 0;
        while ($i < strlen($hexbytes))
        {
            $hexpair = substr($hexbytes, $i, 2);
            $decimal = hexdec($hexpair);
            if ($decimal < 32 || $decimal > 126)
            {
                $top = substr($hexbytes, 0, $i);
                $escaped = EscapeHex($hexpair);
                $bottom = substr($hexbytes, $i + 2);
                $hexbytes = $top . $escaped . $bottom;
                $i += 8;
            }
            $i += 2;
        }
        $string = hex2bin($hexbytes);
        return $string;
    }
    function EscapeHex($string) //Helper function for EscapeNonASCII()
    {
        $x = "5C5C78"; //\x
        $topnibble = bin2hex($string[0]); //Convert top nibble to hex
        $bottomnibble = bin2hex($string[1]); //Convert bottom nibble to hex
        $escaped = $x . $topnibble . $bottomnibble; //Concatenate escape sequence "\x" with top and bottom nibble
        return $escaped;
    }

    function UnescapeNonASCII($string) //Convert string to hex, replace escaped hex with actual hex.
    {
        $stringtohex = bin2hex($string);
        $stringtohex = preg_replace_callback('/5c5c78([a-fA-F0-9]{4})/', function ($m) { 
            return hex2bin($m[1]);
        }, $stringtohex);
        return hex2bin(strtoupper($stringtohex));
    }
?>

0

मैंने https://github.com/neitanod/forceutf8 का उपयोग करके UTF8 के लिए समस्या हल की

use ForceUTF8\Encoding;

$string = Encoding::fixUTF8($string);

1
यह परिवाद UTF-8 उच्चारण पात्रों और UTF-8 इमोटिकॉन्स को "?" प्रतीकों। दुर्भाग्य से गंभीर रूप से गंभीर मुद्दा।
क्रिस्टोकिवि

0

यूनिकोड के लिए चयनित उत्तर में regex विफल: 0x1d (php 7.4 के साथ)

एक तरकीब:

<?php
        $ct = 'différents'."\r\n test";

        // fail for Unicode: 0x1d
        $ct = preg_replace('/[\x00-\x1F\x7F]$/u', '',$ct);

        // work for Unicode: 0x1d
        $ct =  preg_replace( '/[^\P{C}]+/u', "",  $ct);

        // work for Unicode: 0x1d and allow line break
        $ct =  preg_replace( '/[^\P{C}\n]+/u', "",  $ct);

        echo $ct;

से: UTF 8 स्ट्रिंग न्यूलाइन को छोड़कर सभी अदृश्य वर्णों को हटा दें

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