كيفية الهروب من $ في php باستخدام preg_replace؟
-
12-09-2019 - |
سؤال
انا استخدم 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);
وأيضا عندما استخدم البيان أعلاه جميع المساحات تحصل على استبدالها $
و $
لا يتم هربها.
كيف يمكنني الهروب من علامة الدولار بشكل صحيح؟
المحلول
أود أن أوصي بشدة باستخدام preg_quote () في حين أن.
نصائح أخرى
يجب أن يتم هرب علامة $ مع نفسها
$tmpStr=preg_replace("/$$/", "\$", $tmpStr);
أود أيضا أن أنصح للنظر إلى addslashes. في حين أن.
الإجابة الصحيحة هي أنه يجب عليك الهروب من Backslash وعلامة الدولار في Regex باستخدام أحرف الهروب PHP.
backslash = \\
dollar sign = \$
$tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr);
هذا مفيد لأي شخص يحتاج إلى مطابقة سلسلة تحتوي على علامة الدولار.
يبدو أن مشكلتك هي واحدة من الهروب. ونقلت واحدة ('
) في PHP يعمل بشكل مختلف عن الاقتباسات المزدوجة ("
). يبدو كثيرا في بيرل، حيث لا يحدث الاستيفاء المتغير في السلاسل المنفردة، وعلامة الدولار ($
) ليس شخصية ميتا:
print "\$"; # prints $
print '\$'; # prints \$
أيضا، ستقوم دروس أحرف بيرل بتبسيط التعليمات البرمجية الخاصة بك:
$tmpStr = preg_replace('/([?#^&*()$\\/])/', '\\\\$1', $tmpStr);
نعم، يبدو ذلك \\$
ينظر إليها من قبل فب $
في سلسلة مزدوجة نقلت. هذا يعني أن لديك لجعل PHP يرى \$
بالقول \\\$
.
أنا فقط حاولت preg_replace("/\\\$$k\\\$/", $v, $data)
وبالفعل يعمل (يحل محل تكرارات $KEY$
مع القيمة.
IIRC يمكنك استبدال $ مع $. لذلك يجب أن يكون $ $
يمكنك أيضا محاولة
$tmpStr=preg_replace('/\$/', '\$', $tmpStr);
أليس صحيحا أن PHP يرى $ ك $؟ لم أختبر ذلك، قد يذهب هذا؛
PHP هو أولا، ويستبدل "/ $ /" مع "/ $ /"، ثم يقوم محرك Preg بالسحر .. لسوء الحظ، $ هو مشغل تعبير منتظم (أعتقد أنه يطابق نهاية السلسلة؟)، لذلك لا يجد - Curracters في النص الخاص بك ولكنه سوف
أعتقد، ما عليك القيام به، هو الشفق على الهروب من $ -character مثل ذلك؛
$ tmpstr = preg_replace ("/ $ /"، " $"، $ tmpstr)؛
أيضا .. في هذه الحالة، كنت قد استخدمت فقط str_replace ()
$pattern = preg_replace('/\$(.+)/', '\\\$$1', $pattern);
في PHP، لحالة معينة من "$" المستخدمة في HTML، يمكنك أيضا إجراء استبدال سابق لكيانه:
$tmpStr = str_replace('$', '$',$tmpStr);
جرب أديشلاشات ()؟