• 1 رای - 3 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
جایگزینی متن یونیکد با استفاده از preg_match
#1
تا به حال برای من پیش نیومده بود که متن یونیکد رو با استفاده از preg_match جایگزین کنم و حالا که پیش اومده کاملاً گیج شدم.

به کد زیر نگاه کنید:

کد پی‌اچ‌پی:
<html>
<
meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</
head>
<
body>
<?
php
// Case 1
$out preg_replace("#(\b|^)فیلتر(\b|$)#i""\\1".'*****'."\\2"" فیلتر \r\n فیلتر \r\n فیلترها \r\n فیلتر.ها \r\n");
echo 
nl2br($out);
// Case 2
$out preg_replace("#(\b|^)تست(\b|$)#i""\\1".'*****'."\\2"" تست \r\n تست \r\n تست‌ها \r\n تست.ها \r\n");
echo 
nl2br($out);
// Case 3
$out preg_replace("#^تست$#i""\\1".'*****'."\\2"" تست \r\n تست \r\n تست‌ها \r\n تست.ها \r\n");
echo 
nl2br($out);
?>
</body>
</html> 
اگر کد را اجرا کنید می‌بینید که در حالت اول، فقط عبارت «فیلترها» به «*****ها» تبدیل می‌شود و عبارات دیگر اصلا match نمی‌شوند. به طرز جالبی، در حالت دوم و در مورد واژه تست قضیه برعکس است و فقط در «تست‌ها» match نمی‌شود و در بقیه حالاتش تابع عمل می‌کند.


در حالت سوم هم از b\ برای تعیین حدود کلمه استفاده نکردم و فقط ^ و $ را به کار بردم که در این حالت اصلاً متن فارسی match نمی‌شود!

سوال این جاست که من چه اشتباهی می‌کنم و چه طور می‌توانم این کد را اصلاح کنم تا در تمام حالات، کلمه مورد نظر من را جایگزین کند.
  پاسخ
تشکر شده توسط :
#2
http://forum.iranphp.org/Thread-%D8%AA%D...8%B3%DB%8C
  پاسخ
تشکر شده توسط :
#3
ممنون از پاسخ اما پسوند u/ کار من رو راه ننداخت. اگر ممکنه کدی که کار می‌کنه برای من بفرستید که بفهمم دقیقاً باید چه کنم.
  پاسخ
تشکر شده توسط :
#4
راهنمایی بیشتری نمی‌کنید؟
  پاسخ
تشکر شده توسط :
#5
متاسفانه این سایت هم گویا به عاقبت سایت دات نت دچار می شه.

هیچ مدیری عملاً سر نمی زنه اینجا
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : parsig
#6
این حرفها چیه؟
من با همه درگیری های شدید که دارم و اینکه دسترسی به اینترنت واسم خیلی خیلی مشکل شده هر روز سر می زنم.
اگر منظور جواب دادن به این پست هست خب حتما جوابی ندارم. در ضمن من که اینجا فقط مدیر نیستم مثلا ۷ تا مدیر داریم.
  پاسخ
تشکر شده توسط :
#7
Huji شما دارید با تابعی اینکارو انجام میدید که قابلیت کار دقیق با رشته های Unicode رو نداره... باید از توابع Multibyte String استفاده کنید:

http://ir.php.net/manual/en/ref.mbstring.php

mb_ereg_match
mb_ereg_replace
mb_eregi_replace
mb_eregi
...
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط :
#8
ممنون از پاسخ اما با mb_eregi_replace که اصلاً هیچ کدوم از جایگزینی‌ها انجام نشد. برای همین عرض کردم لطفاً کدی که کار می‌کنه بدید.
  پاسخ
تشکر شده توسط :
#9
Expression تون اشتباهه.
یکسری توابع کاربردی با mb_eregi_replace در اینجا نوشته شده:
http://ir.php.net/manual/en/ref.mbstring.php
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط :
#10
Y.P.Y ممکنه اشتباه expression رو به من توضیح بدید؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان