PDA

View Full Version : سوال: گرفتن کاراکترهای Escape نشده توسط BackSlash



امیـرحسین
شنبه 24 دی 1390, 17:33 عصر
سلام
من یک String دارم شامل کاراکترهای مختلف. حالا میخوام فقط حروف لاتینش رو بگیرم و فقط اونهایی که با بک‌اسلش Escape نشده‌اند. یعنی در کد زیر، a$ به b$ تبدیل شه:

$a = '5852& ^ \a\\b\\\\\c D \\e k.';
$b = 'bDek';
از کد زیر استفاده میخوام بکنم:

preg_replace("/(\\\.|\\[a-zA-Z]|[^[a-zA-Z])+/", '', $a);
مشکل اینجاست که این کد در این سرویس آنلاین (http://www.pagecolumn.com/tool/pregtest.htm) صحیح کار میکنه ولی توی لوکال من "Dk" برمیگردونه یعنی صحیح کار نمی‌کنه!
راه حلی اساسی به نظرتون میرسه که همه‌جا کار کنه و قابل کنترل باشه؟

این هم مشخصات لازم:

PHP: 5.3.6
PCRE Library Version: 8.11 2010-12-10

من گفتم بیام کاراکتر به کاراکتر چک کنم ولی متاسفانه PHP تفاوتی بین یک بک‌اسلش و دو تا بک‌اسلش قائل نمیشه یعنی مقدار زیر رو ۴ کارکتر میبینه:

$str = '\a\\b'; // "\", "a", "\", "b"

دوستان نظرتون چیه؟

رضا قربانی
شنبه 24 دی 1390, 20:28 عصر
امیرحسین جان می تونی از این تیکه کدی که نوشتم استفاد کنی :
اینجا فقط یک مشکل داره باید بک اسلش ها رو به صورت زوج بزنی . یعنی توی آرایه یکبار \\ اضافه کنی یکبار \\\\ و یکبار \\\\\\ تست کنی متوجه می شی


$symbol = array(',', ')', '(', "'", '"','!', '?', '/', '[', ']','هر کاراکتری که دوست داری');

$Famili =str_replace($symbol,"",$_POST['Famili');



مشکل جالبیه . اینطوری هم شاید تونستی جواب بگیری : (مشکل \ رو اینطوری می تونی حل کنی و ما بقی کد هاتون رو هم بهش اضافه کن)
یعنی چند بار بیایی و چک کنی و \ اضافه رو پاک کنی :لبخند: (کلک رشتی بزنی)


$symbol = array(',', ')', , "'", '"','!', '?', '/', '[', ']','هر کاراکتری که دوست داری');
$symbolCheck = array('\\', '\\\\','\\\\\\', '\\\\\\\\');
$Famili =str_replace($symbol,"",$_POST['Famili');
$Famili =str_replace($symbolCheck,"",$Famili);

به نظرم باید چند بار چک کنی . مثلا یکبار اعداد رو کاراکترها رو حذف کنی با کدهای خودت و ... در انتها بک اسلش ها جمع می شن و با کد بالا از بین می برینشون.

امیـرحسین
شنبه 24 دی 1390, 20:35 عصر
دست شما درد نکنه ولی من در واقع دنبال تشخیص دادن دو تا string زیر هستم:

\a
\\a
PHP بین این دو تا فرق نمیذاره. درست هم هست البته ولی خب من نیاز دارم تا تشخیص بدم.
replace قدم دومه.

رضا قربانی
شنبه 24 دی 1390, 21:00 عصر
Of course if this is all which has to be done, using a regular expression would be an overkill. You could do it with the function str_replace():


$string = "c:\somepath\somefile.php";
$string = str_replace('\\','/',$string); // please notice that we use '\\', not '\'
echo "$string";

It would produce:
c:/somepath/somefile.php


Please notice that we used '\\', not '\' in str_replace(). '\' would produce a parse error. This is because the PHP parser would consider the second single quote in the string '\' escaped by the backslash "\". This is why we had to escape "\" with another "\".





اینجا رو یک دیدی بزن :
http://www.skdevelopment.com/php-regular-expressions.php


موفق باشید