2009-04-20 12 views
5

मैं preg_replace उपयोग कर रहा हूँ विशेष वर्ण से बचने के लिए:

$tmpStr=preg_replace("/\?/", "\?", $tmpStr); 
$tmpStr=preg_replace("/\#/", "\#", $tmpStr); 
$tmpStr=preg_replace("/\^/", "\^", $tmpStr); 
$tmpStr=preg_replace("/\&/", "\&", $tmpStr); 
$tmpStr=preg_replace("/\*/", "\*", $tmpStr); 
$tmpStr=preg_replace("/\(/", "\(", $tmpStr); 
$tmpStr=preg_replace("/\)/", "\)", $tmpStr); 
$tmpStr=preg_replace("/\//", "\/", $tmpStr); 

लेकिन मैं एक ही समारोह का उपयोग कर $ से बचने के लिए सक्षम नहीं हूँ:

$tmpStr=preg_replace("/\$/", "\$", $tmpStr); 

और यह भी जब मैं ऊपर बयान सभी रिक्त स्थान पाने का उपयोग $ और $ से बच निकला नहीं जा रहा है।

मैं डॉलर के सही तरीके से कैसे बचूं?

उत्तर

12

कोशिश कर सकते हैं मैं दृढ़ता के बजाय preg_quote() का उपयोग कर की सिफारिश करेंगे होना चाहिए।

+0

अगर यह preg_replace के बजाय preg_quote का उपयोग करने के लिए तर्क दिया गया तो मुझे यह उत्तर अधिक उपयोगी लगेगा। साथ ही, यह जानना अच्छा लगेगा कि preg_replace दृष्टिकोण डॉलर के चिह्न से बचने के लिए क्यों काम नहीं करता था। –

+1

@RandallStewart "preg_replace के बजाय preg_quote"? उन दो कार्यों को बदलने योग्य नहीं हैं, आप दूसरे के बजाय एक का उपयोग नहीं कर सकते हैं, आप नियमित अभिव्यक्ति तारों ('preg_replace' के अंदर उपयोग किए गए) में मूल्यों से बचने के लिए' preg_quote' का उपयोग करें) –

0

आईआईआरसी आप $ $ के साथ प्रतिस्थापित करते हैं। तो यह $$

तुम भी

$tmpStr=preg_replace('/\$/', '\$', $tmpStr); 
+1

मैंने कोशिश की ... यह काम नहीं किया ... :( –

4

$ साइन इतना

$tmpStr=preg_replace("/$$/", "\$", $tmpStr); 

मैं भी बजाय addslashes को देखने के लिए सलाह देंगे खुद के साथ भाग जाना है।

0

क्या यह सच नहीं है कि PHP $ $ $ के रूप में देखता है? मैंने इसका परीक्षण नहीं किया है, यह इस तरह से हो सकता है;

php सबसे पहले है, और "/ $ /"/"/ $ /" के साथ आपके "/ \ $ /" को प्रतिस्थापित करता है तो प्रीग इंजन यह जादू करता है .. दुर्भाग्य से, $ एक नियमित अभिव्यक्ति ऑपरेटर है (मुझे विश्वास है कि यह एक के अंत से मेल खाता है स्ट्रिंग?), इसलिए इसे आपके टेक्स्ट में $ -characters नहीं मिलेंगे, लेकिन

मुझे लगता है कि आपको क्या करना है, यह $ -character से बचने के लिए दोगुना है;

$ tmpStr = preg_replace ("/ \ $ /", "\ $", $ tmpStr);

भी .. इस मामले में, मैं सिर्फ इस्तेमाल किया है | str_replace()

3

लग रहा है आपकी समस्या की तरह भागने में से एक है। PHP में सिंगल कोट्स (') डबल कोट्स (") से अलग तरीके से काम करते हैं। यह पर्ल, जहां चर प्रक्षेप अकेले उद्धृत तार में ऐसा नहीं होता है की तरह एक बहुत कुछ है, और डॉलर चिह्न ($) एक मेटा-चरित्र नहीं है:

print "\$"; # prints $ 
print '\$'; # prints \$ 

इसके अलावा, पर्ल के चरित्र वर्गों अपने कोड को सरल बनाएगा:

$tmpStr = preg_replace('/([?#^&*()$\\/])/', '\\\\$1', $tmpStr); 
3

सही जवाब है कि आप बैकस्लैश और PHP का भागना अक्षरों का उपयोग regex में डॉलर साइन पलायन करना होगा है।

backslash = \\ 
dollar sign = \$ 

$tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr); 

यह किसी एक स्ट्रिंग है कि एक डॉलर चिह्न शामिल मिलान होना आवश्यक है कि के लिए उपयोगी है।

2

हां, ऐसा लगता है कि \\$ को PHP द्वारा $ को डबल-उद्धृत स्ट्रिंग में देखा जाता है। इसका मतलब है कि आपको कहकर PHP को \$ देखना होगा।

मैं सिर्फ preg_replace("/\\\$$k\\\$/", $v, $data) की कोशिश की है और वास्तव में यह काम करता है (मूल्य के साथ $KEY$ की घटनाओं को बदल देता है

-1

पीएचपी में, "$" HTML में इस्तेमाल, आप भी अपनी इकाई के लिए करते हैं पिछले एक जगह ले सकता है की विशेष मामले के लिए।:

$tmpStr = str_replace('$', '$',$tmpStr); 
0
$pattern = preg_replace('/\$(.+)/', '\\\$$1', $pattern); 
+0

क्या आप अपने कोड के बारे में कुछ विवरण जोड़ सकते हैं और यह कैसे प्रश्न में समस्या (ओं) को संबोधित करता है? कोड केवल उत्तर बहुत उपयोगी नहीं हैं, खासकर भविष्य के पाठकों के लिए जो इस पोस्ट पर ठोकर खाते हैं। धन्यवाद, – Cristik

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