2012-03-28 12 views
5

क्या कोई मुझे बता सकता है कि यहां क्या हो रहा है?तारों में PHP और बैकस्लाश

<?php 
// true 
var_dump('\\ ' === '\ '); 

// false 
var_dump('\\\\ ' === '\\ '); 

// true 
var_dump('\\\\ ' === '\\\ '); 
+2

क्या आपने तारों को प्रिंट करने का प्रयास किया है? – JJJ

+1

हाँ, हेक्सकोड डंप किया। वे वास्तव में अलग हैं, ऐसा लगता है कि \\ किसी कारण से \\ गिर गया है, लेकिन यह एक एकल उद्धृत स्ट्रिंग में है, यह वहां नहीं होना चाहिए। –

+2

कोई फर्क नहीं पड़ता कि स्ट्रिंग सिंगल या डबल उद्धृत है या नहीं। बचने का चरित्र दोनों मामलों में समान रूप से काम करता है। – JJJ

उत्तर

8

\ एक स्ट्रिंग शाब्दिक अंदर भागने दृश्यों के कई प्रकार का परिचय है, \\ एक शाब्दिक के लिए एस्केप अनुक्रम है "\"। लेकिन, \ एस जो बचने के अनुक्रम का समाधान नहीं करते हैं उन्हें शाब्दिक "\" के रूप में भी लिया जाता है।

इसके लिए, '\\ ' स्ट्रिंग "\", '\\\\ ' स्ट्रिंग "\\" के लिए खड़ा है, जैसे कि '\\\ '। आज़माएं:

echo '\\\\ '; -> \\ 

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single देखें।

+0

मुझे नहीं पता था कि \\ एक-उद्धृत स्ट्रिंग में काम करता है, सोचा कि यह केवल 'स्वयं पर ही काम करता है। –

+0

@ DaliborKarlović यह इस तरह स्थापित है ताकि आपके पास एक सिंगल उद्धृत स्ट्रिंग हो जो बैकस्लैश के साथ समाप्त हो, यदि आप बैकस्लैश से बच नहीं सकते हैं तो आप सिंगल कोट्स में 'स्ट्रिंग \' को लपेटने में सक्षम नहीं होंगे। – DaveRandom

+0

हाँ, मुझे यह मिल गया है, मेरा बुरा यह है कि मैं इसे एक शाब्दिक \ n (नियंत्रण कक्ष नहीं) के लिए खोज रहे रेगेक्स के अंदर उपयोग करने का प्रयास कर रहा था, इसलिए preg_quote ('# \ n #') ने एक स्ट्रिंग का मिलान किया जो कि मेल खाता था, लेकिन var_dump() - preg_quote() द्वारा उत्पादित मान में और इसके बजाय इसका उपयोग नहीं किया गया। अब मुझे # (\\\ n) {2,} # –

1

1 उदाहरण में आप 3

"\\ " and "\\ " which is TRUE 

में 2

"\\ " and "\ " which is FALSE 

में

"\ " and "\ " which is TRUE 

तुलना कर रहे हैं आप अपने तार प्रिंट आउट तो

$s = array('\ ', '\\ ', '\\\ ', '\\\\ '); 
var_dump($s); 

आप

array(4) { 
    [0]=> 
    string(2) "\ " 
    [1]=> 
    string(2) "\ " 
    [2]=> 
    string(3) "\\ " 
    [3]=> 
    string(3) "\\ " 
} 

प्राप्त सभी डबल स्लैश '\\' एकल स्लैश '\' और sigle-स्लैश में तब्दील कर दिया गया है एक ही बने रहेंगे। भागने से एकल और डबल-उद्धृत तारों के अंदर एक ही तरह से काम करता है।

4

एकल उद्धृत तारों में, कोई बचने के दृश्यों को अलग नहीं किया जाता है। बैकस्लैश केवल एक बच निकला चरित्र है यदि यह तुरंत एक एकल उद्धरण, या बैकस्लैश से पहले होता है।

तो:

var_dump('\\ '); // String (2) "\ " 
var_dump('\ '); // String (2) "\ " 
// They do match 

var_dump('\\\\ '); // String (3) "\\ " 
var_dump('\\ '); // String (2) "\ " 
// They don't match 

var_dump('\\\\ '); // String (3) "\\ " 
var_dump('\\\ '); // String (3) "\\ " 
// They do match 

यह उम्मीद और दस्तावेज व्यवहार है, हालांकि यह आप इसे चेहरे पर चारों ओर सिर रैप करने के लिए मुश्किल हो सकता है।

+0

+1 का उपयोग करना अच्छा था, स्पष्टीकरण पढ़ने में आसान ... – ManseUK

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