2010-11-12 19 views
21

मैं string(6) " page" कैसे ट्रिम कर सकता हूं, जहां पहला व्हाइटस्पेस 0xc2a0 गैर-ब्रेकिंग स्पेस है?PHP में यूनिकोड व्हाइटस्पेस ट्रिम करें 5.2

मैंने trim() और preg_match('/^\s*(.*)\s*$/u', $key, $m); को आजमाया है।

एक और सवाल: मैं इन पात्रों की भरोसेमंद प्रतिलिपि कैसे बना सकता हूं? उन्हें "सामान्य" रिक्त स्थान में परिवर्तित किया जाता है, जो इसे डीबग करना मुश्किल बनाता है।

+0

आप 'प्रतिलिपि' के साथ क्या मतलब है? कहां से कॉपी करें? वेब पेज से आईडीई/संपादक तक? –

+0

@antil मैं ब्राउज़र से कहूंगा। मेरे पास एक समान समस्या है और क्रोम, फ़ायरफ़ॉक्स इत्यादि, इसे यूटीएफ -8 में एक जगह के रूप में दिखाएं और जब आईएसओ -885 9 -1 –

उत्तर

36
preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u','',$str); 
+2

अफसोस की बात है, इससे पहले कि मैंने आपके उत्तर में अपना रास्ता कम कर दिया, मैंने इसे स्वयं पाया। लेकिन आप 'यू' संशोधक भूल गए हैं, और 'थोड़ा' समझ में आता है। कार्य कोड: 'preg_replace ('/^\ p {Z} + | \ p {Z} + $/u', '', $ key)'। – Znarkus

+2

'preg_replace ('/^[\ pZ \ pC] + | [\ pZ \ pc] + $/u'' – Znarkus

+0

@Znarkus: क्या PHP समर्थन नहीं करता है, या कम से कम प्रोत्साहित नहीं करता है, गैर-पागल- '/ x' या' (? x) ' – tchrist

2

शायद मल्टीबाइट स्ट्रिंग से कुछ फ़ंक्शंस सेट? http://php.net/manual/en/function.mb-ereg.php mb_trim नहीं देख सकता है, लेकिन एमबी सुरक्षित regex कार्यों का एक सेट है।

जी

+0

preg_ * में और यू विकल्प (** नहीं ** यू) यूनिकोड को संभालता है। –

6

PCRE unicode properties गुण इस

यहाँ प्राप्त करने के लिए इस्तेमाल किया जा सकता है कि मैं कोड के साथ खेला और आप क्या चाहते करने के लिए लगता है:

<?php 
function unicode_trim ($str) { 
    return preg_replace('/^[\pZ\pC]+([\PZ\PC]*)[\pZ\pC]+$/u', '$1', $str); 
} 

$key = chr(0xc2) . chr(0xa0) . '#page#' . chr(0xc2) . chr(0xa0); 

var_dump(unicode_trim($key)); 

परिणाम

[~]> php e.php 
string(6) "#page#" 

स्पष्टीकरण:

\ p {xx} xx संपत्ति \ p {xx} एक चरित्र xx संपत्ति के बिना के साथ एक चरित्र

xx केवल एक ही चरित्र है, तो है, तो {} छोड़ा जा सकता है उदाहरण के लिए \ P {जेड}

जेड सभी विभाजक के लिए खड़ा है \ PZ रूप में ही है, सी (उदाहरण के नियंत्रण वर्ण के लिए) सभी "अन्य" वर्ण के लिए खड़ा है

+0

के माध्यम से regexes पर मोड जो किसी भी गैर अक्षर चरित्र (#!% 123 ...) को हटा देगा। –

+0

आप सही हैं, मैंने regexp को अद्यतन किया है अब –

+0

क्षमा करें, नहीं किया काम। पिछली जगहों को ट्रिम नहीं किया – Znarkus

5

मौजूदा समाधान केवल \pZ वर्णों का उल्लेख है।

% unichars '\p{WhiteSpace}' '\PZ' 
-- 9 0009 CHARACTER TABULATION 
-- 10 000A LINE FEED (LF) 
-- 11 000B LINE TABULATION 
-- 12 000C FORM FEED (FF) 
-- 13 000D CARRIAGE RETURN (CR) 
-- 133 0085 NEXT LINE (NEL) 

उन छह प्रकार \pC के सभी कर रहे हैं, और विशेष रूप से, प्रकार \p{Cc}: हालांकि, वहाँ छह यूनिकोड खाली स्थान के अक्षर हैं जो कि संपत्ति के दायरे से बाहर आते हैं। लेकिन वहाँ उनसठ गैर-सफ़ेद अक्षर हैं जो भी \p{Cc} हैं:

% unichars '\P{WhiteSpace}' '\p{Cc}' | wc -l 
     59 

कि क्या कुछ एक मुद्रण योग्य चरित्र है या नहीं करने के लिए अपने खुद के परीक्षण के सरल संस्करण बस [\pZ\pC] है; उदाहरण के लिए, unichars उपयोग करता है।

एक और सावधानीपूर्वक परीक्षण इस बात पर विचार करेगा कि कुछ 0, 1, या 2 प्रिंट पदों को लेना चाहिए या नहीं। इसके लिए यह विचार करना आवश्यक है कि यह एक संयोजन चिह्न है, जो संपत्ति \pM है, और यह भी कि आधा चौड़ाई या पूर्ण-चौड़ाई वाली गुण है या नहीं। उदाहरण के लिए:

% uniprops ff5e ffeb 
U+FF5E ‹~› \N{ FULLWIDTH TILDE }: 
    \pS \p{Sm} 
    All Any Assigned InHalfwidthAndFullwidthForms Changes_When_NFKC_Casefolded 
     CWKCF Common Zyyy Sm S Gr_Base Grapheme_Base Graph GrBase Math 
     Math_Symbol Print Symbol 
U+FFEB ‹→› \N{ HALFWIDTH RIGHTWARDS ARROW }: 
    \pS \p{Sm} 
    All Any Assigned InHalfwidthAndFullwidthForms Changes_When_NFKC_Casefolded 
     CWKCF Common Zyyy Sm S Gr_Base Grapheme_Base Graph GrBase Math 
     Math_Symbol Print Symbol 

उन लोगों के लिए, आपको गैर-बाइनरी पूर्वी एशियाई चौड़ाई संपत्ति का उपयोग करने की आवश्यकता होगी।ये लागू होते हैं:

% uniprops -l | grep -i width 
Block:Halfwidth_And_Fullwidth_Forms 
InHalfwidthAndFullwidthForms 
East_Asian_Width:A 
East_Asian_Width=Ambiguous 
East_Asian_Width:Ambiguous 
East_Asian_Width:F 
East_Asian_Width=Fullwidth 
East_Asian_Width:Fullwidth 
East_Asian_Width:H 
East_Asian_Width=Halfwidth 
East_Asian_Width:Halfwidth 
East_Asian_Width=Neutral 
East_Asian_Width:Na 
East_Asian_Width=Narrow 
East_Asian_Width:Narrow 
East_Asian_Width:Neutral 
East_Asian_Width:W 
East_Asian_Width=Wide 
East_Asian_Width:Wide 

उन \p{Ea=F} और \p{Ea=H} की तरह संक्षिप्त रूपों की है।

% uninames '(FULL|HALF)WIDTH' | wc -l 
    454 
बेशक

, आप इन बातों के लिए नामों पर नहीं जाना चाहिए, लेकिन गुणों पर:

% unichars '[\p{Ea=F}\p{Ea=H}]' | wc -l 
    227 
% unichars '[\p{Ea=F}\p{Ea=H}\p{Ea=Na}]' | wc -l 
    338 
% unichars '[\p{Ea=F}\p{Ea=H}\p{Ea=Na}\pM]' | wc -l 
    1488 

बताएंगे कि कैसे कई करने के लिए, कई गुण इन इनमें से एक गुच्छा रहे हैं चीजें सही मायने में है, यहां तीन अलग-अलग पात्रों से भरा संपत्ति डंप, यूनिकोड 5.2 के खिलाफ चलाए है:

% uniprops -ga NEL "COMBINING TILDE" ff5e 
U+0085 ‹U+0085› \N{ NEXT LINE (NEL) }: 
    \s \v \R \pC \p{Cc} 
    All Any Assigned InLatin1 C Other Cc Cntrl Common Zyyy Control Pat_WS Pattern_White_Space PatWS Space SpacePerl VertSpace 
     White_Space WSpace 
    Age:1.1 Bidi_Class:B Bidi_Class=Paragraph_Separator Bidi_Class:Paragraph_Separator Bc=B Block:Latin_1 
     Block=Latin_1_Supplement Block:Latin_1_Supplement Blk=Latin1 General_Category=Other Canonical_Combining_Class:0 
     Canonical_Combining_Class=Not_Reordered Canonical_Combining_Class:Not_Reordered Ccc=NR Canonical_Combining_Class:NR 
     General_Category=Control Script=Common Decomposition_Type:None Dt=None East_Asian_Width=Neutral East_Asian_Width:Neutral 
     General_Category:C General_Category:Cc General_Category:Cntrl General_Category:Control Gc=Cc General_Category:Other Gc=C 
     Grapheme_Cluster_Break:CN Grapheme_Cluster_Break=Control Grapheme_Cluster_Break:Control GCB=CN Hangul_Syllable_Type:NA 
     Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Joining_Group:No_Joining_Group 
     Jg=NoJoiningGroup Joining_Type:Non_Joining Jt=U Joining_Type:U Joining_Type=Non_Joining Line_Break:Next_Line Lb=NL 
     Line_Break:NL Line_Break=Next_Line Numeric_Type:None Nt=None Numeric_Value:NaN Nv=NaN Present_In:1.1 Age=1.1 In=1.1 
     Present_In:2.0 In=2.0 Present_In:2.1 In=2.1 Present_In:3.0 In=3.0 Present_In:3.1 In=3.1 Present_In:3.2 In=3.2 
     Present_In:4.0 In=4.0 Present_In:4.1 In=4.1 Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 
     Script:Common Sc=Zyyy Script:Zyyy Sentence_Break:SE Sentence_Break=Sep Sentence_Break:Sep SB=SE Word_Break:Newline WB=NL 
     Word_Break:NL Word_Break=Newline 
U+0303 ‹̃› \N{ COMBINING TILDE }: 
    \w \pM \p{Mn} 
    All Any Assigned InCombiningDiacriticalMarks Case_Ignorable CI Dia Diacritic M Mn Gr_Ext Grapheme_Extend Graph GrExt 
     ID_Continue IDC Inherited Zinh Mark Nonspacing_Mark Print Qaai Word XID_Continue XIDC 
    Age:1.1 Bidi_Class:Nonspacing_Mark Bc=NSM Bidi_Class:NSM Bidi_Class=Nonspacing_Mark Block:Combining_Diacritical_Marks 
     Canonical_Combining_Class:230 Canonical_Combining_Class=Above Canonical_Combining_Class:A 
     Canonical_Combining_Class:Above Ccc=A Decomposition_Type:None Dt=None East_Asian_Width:A East_Asian_Width=Ambiguous 
     East_Asian_Width:Ambiguous Ea=A General_Category:M General_Category=Mark General_Category:Mark Gc=M General_Category:Mn 
     General_Category=Nonspacing_Mark General_Category:Nonspacing_Mark Gc=Mn Grapheme_Cluster_Break:EX 
     Grapheme_Cluster_Break=Extend Grapheme_Cluster_Break:Extend GCB=EX Hangul_Syllable_Type:NA 
     Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Script=Inherited 
     Joining_Group:No_Joining_Group Jg=NoJoiningGroup Joining_Type:T Joining_Type=Transparent Joining_Type:Transparent Jt=T 
     Line_Break:CM Line_Break=Combining_Mark Line_Break:Combining_Mark Lb=CM NFC_Quick_Check:M NFC_Quick_Check=Maybe 
     NFC_Quick_Check:Maybe NFCQC=M NFKC_Quick_Check:M NFKC_Quick_Check=Maybe NFKC_Quick_Check:Maybe NFKCQC=M 
     Numeric_Type:None Nt=None Numeric_Value:NaN Nv=NaN Present_In:1.1 Age=1.1 In=1.1 Present_In:2.0 In=2.0 Present_In:2.1 
     In=2.1 Present_In:3.0 In=3.0 Present_In:3.1 In=3.1 Present_In:3.2 In=3.2 Present_In:4.0 In=4.0 Present_In:4.1 In=4.1 
     Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 Script:Inherited Sc=Zinh Script:Qaai Script:Zinh 
     Sentence_Break:EX Sentence_Break=Extend Sentence_Break:Extend SB=EX Word_Break:Extend WB=Extend 
U+FF5E ‹~› \N{ FULLWIDTH TILDE }: 
    \pS \p{Sm} 
    All Any Assigned InHalfwidthAndFullwidthForms Changes_When_NFKC_Casefolded CWKCF Common Zyyy Sm S Gr_Base Grapheme_Base 
     Graph GrBase Math Math_Symbol Print Symbol 
    Age:1.1 Bidi_Class:ON Bidi_Class=Other_Neutral Bidi_Class:Other_Neutral Bc=ON Block:Halfwidth_And_Fullwidth_Forms 
     Canonical_Combining_Class:0 Canonical_Combining_Class=Not_Reordered Canonical_Combining_Class:Not_Reordered Ccc=NR 
     Canonical_Combining_Class:NR Script=Common Decomposition_Type:Non_Canon Decomposition_Type=Non_Canonical 
     Decomposition_Type:Non_Canonical Dt=NonCanon Decomposition_Type:Wide Dt=Wide East_Asian_Width:F 
     East_Asian_Width=Fullwidth East_Asian_Width:Fullwidth Ea=F General_Category:Math_Symbol Gc=Sm General_Category:S 
     General_Category=Symbol General_Category:Sm General_Category=Math_Symbol General_Category:Symbol Gc=S 
     Grapheme_Cluster_Break:Other GCB=XX Grapheme_Cluster_Break:XX Grapheme_Cluster_Break=Other Hangul_Syllable_Type:NA 
     Hangul_Syllable_Type=Not_Applicable Hangul_Syllable_Type:Not_Applicable Hst=NA Joining_Group:No_Joining_Group 
     Jg=NoJoiningGroup Joining_Type:Non_Joining Jt=U Joining_Type:U Joining_Type=Non_Joining Line_Break:ID 
     Line_Break=Ideographic Line_Break:Ideographic Lb=ID Numeric_Type:None Nt=None Numeric_Value:NaN Nv=NaN Present_In:1.1 
     Age=1.1 In=1.1 Present_In:2.0 In=2.0 Present_In:2.1 In=2.1 Present_In:3.0 In=3.0 Present_In:3.1 In=3.1 Present_In:3.2 
     In=3.2 Present_In:4.0 In=4.0 Present_In:4.1 In=4.1 Present_In:5.0 In=5.0 Present_In:5.1 In=5.1 Present_In:5.2 In=5.2 
     Script:Common Sc=Zyyy Script:Zyyy Sentence_Break:Other SB=XX Sentence_Break:XX Sentence_Break=Other Word_Break:Other 
     WB=XX Word_Break:XX Word_Break=Other 

सुंदर तेजस्वी, हाँ?

आप इस दूर पढ़ चुके हैं और जहां तीन यूनिकोड उपयोगिताओं ऊपर सचित्र करने के लिए पता करने के लिए चाहते हैं, तो uniprops, unichars, और uninames, कृपया मुझे मेल भेजने क्योंकि वर्तमान लिंक अभी कार्य नहीं कर रहे हैं।

+0

अन्य/प्रारूप ब्लॉक में कुछ सामान भी है - मंगोलियन स्वर विभाजक, शून्य-चौड़ाई (स्थान/योजक/गैर-योजक), शब्द योजक, और शून्य चौड़ाई गैर-ब्रेकिंग स्पेस। चाहे वे विभाजित हों या नहीं, बड़े तर्कों का कारण बनना चाहिए। –

0

लेकिन यहाँ मेरी ही समाधान है, क्योंकि कभी कभी UTF8 रिक्त स्थान हैं:

$stringg = preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u','',$stringg); 
$stringg = preg_replace('/\s+/u', '', $stringg); 
+2

यह क्या करता है? यूनिकोड रिक्त स्थान ट्रिम करें तो स्ट्रिंग से सभी रिक्त स्थान हटा दें? – Znarkus

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