سؤال

انا استخدم 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);

جرب أديشلاشات ()؟

يفحصphp.net / addslashes ()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top