2015-06-22 7 views
7

मैं PHP में एक स्थान की हेक्साडेसिमल बराबर मैं bin2hex साथ खेल सकते हैं की खोज करना चाहते हैं:अंतरिक्ष की तरह कितने वर्ण दिखाई दे रहे हैं, लेकिन स्पेस वर्ण नहीं हैं?

php > echo var_dump(bin2hex(" ")); 
string(2) "20" 

मैं भी "20"

php > echo var_dump(hex2bin("20")); 
string(1) " " 

से अंतरिक्ष चरित्र प्राप्त कर सकते हैं लेकिन वहाँ यूनिकोड संस्करण मौजूद हैं

php > echo var_dump(hex2bin('c2a0')); 
string(2) " " 

तो, मैं कुछ स्ट्रिंग (HTTP अनुरोध से उदाहरण के लिए) प्राप्त कर सकते हैं जहाँ मैं पहचान नहीं कर सकते "नहीं ख: एक" दृश्यमान "अंतरिक्ष की मेरी आंखों के साथ "रिक्त स्थान"। तो, ...

$string = preg_replace('~\x{00a0}~siu', ' ', $string); 

PHP में सभी "स्पेस जैसे" अक्षरों को खोजने और बदलने का कोई बेहतर तरीका है?

उत्तर

5

आप एक Unicode category \p{Zs} का उपयोग कर सकते:

Zs         अंतरिक्ष विभाजक

$string = preg_replace('~\p{Zs}~u', ' ', $string); 

\p{Zs} यूनिकोड श्रेणी वर्ग से मेल खाएगी these space-like symbols:

Character Name 
U+0020  SPACE 
U+00A0  NO-BREAK SPACE 
U+1680  OGHAM SPACE MARK 
U+2000  EN QUAD 
U+2001  EM QUAD 
U+2002  EN SPACE 
U+2003  EM SPACE 
U+2004  THREE-PER-EM SPACE 
U+2005  FOUR-PER-EM SPACE 
U+2006  SIX-PER-EM SPACE 
U+2007  FIGURE SPACE 
U+2008  PUNCTUATION SPACE 
U+2009  THIN SPACE 
U+200A  HAIR SPACE 
U+202F  NARROW NO-BREAK SPACE 
U+205F  MEDIUM MATHEMATICAL SPACE 
U+3000  IDEOGRAPHIC SPACE 
+1

यह एक टैब – anubhava

+0

@anubhava से भी मेल नहीं खाएगा: मैंने सोचा था कि प्रश्न * अंतरिक्ष-जैसी * प्रतीकों से मिलान करने के बारे में है, न कि * टैब-जैसी * प्रतीकों। –

+0

सुनिश्चित नहीं है कि ** स्पेस की तरह कैसे परिभाषित किया जाए ** क्या इसमें फॉर्मफीड, लाइनफीड या नहीं शामिल होना चाहिए? – anubhava

संबंधित मुद्दे