PDA

View Full Version : کمک برای preg_replace برای زبان فارسی



mamali-mohammad
چهارشنبه 21 دی 1390, 01:15 صبح
سلام
من این کد رو استفاده می کنم :

preg_replace('#[^A-Za-z-0-9]#i','',$_GET['id']);
این برای زبان انگلیسی خوبه
اما اگه مقدار دریافتی فارسی باشه دیگه جواب نمیده
چه کنم ؟
ممنون

امیـرحسین
چهارشنبه 21 دی 1390, 09:26 صبح
Regular Expression قابلیت چک کردن کدهای یونیکد رو داره و برای پیدا کردن کاراکترهای فارسی باید از کد یونیکدشون استفاده شه و البته میشه براش بازه هم تعریف کرد. نمونه:

$str = 'aaaسلامbbbسلامcccسلامddd';
$a = preg_replace('@[^\x{0600}-\x{06FF}]@u', '-', $str);
echo $a; // ---سلام---سلام---سلام---
این بازه که من استفاده کردم Arabic بود. فارسی دقیق توی چند تا بازه است! توی این صفحه میتونید بازه‌ها رو ببینید و بهترین بازه رو استفاده کنید: Unicode Character Ranges (http://jrgraphix.net/research/unicode_blocks.php)

mamali-mohammad
چهارشنبه 21 دی 1390, 11:21 صبح
ممنون
اما تو این لیست برای زبان فارسی چیزی نبود

امیـرحسین
چهارشنبه 21 دی 1390, 13:45 عصر
اون Arabic شامل همه‌ی کاراکترهای اون مدلیه یعنی گچ پژ هم توش هست و در واقع فارسی کامل توش هست اما برای این میگم فارسی تو چند تا بازه است چون مثلا تو بعضی بازه‌های دیگه هم حروف فارسی پیدا میشه و تو همون بازه کلی کاراکتر هست که اصلا فارسی نیست و باید از بازه حذف شه ولی در حالت کلی همین بازه‌ای که تو مثال من بود کافیه...

mamali-mohammad
چهارشنبه 21 دی 1390, 14:23 عصر
میشه همین کد خودتون رو با کد من ترکیب کنید بدید ؟

preg_replace('#[^A-Za-z-0-9]#i','',$_GET['id']);

ممنون

mamali-mohammad
چهارشنبه 21 دی 1390, 17:58 عصر
داداش یه کمکی کن
ممنون

tux-world
چهارشنبه 21 دی 1390, 18:09 عصر
داداش یه کمکی کن
ممنون
عزیزم امیر حسین بهت لینک مستقیم داده برنامه خودتون هستش . بهتره خودتون هم یه تلاشی بکنید

mamali-mohammad
چهارشنبه 21 دی 1390, 18:19 عصر
من تلاش کردم نتونستم

tem988
چهارشنبه 21 دی 1390, 21:06 عصر
سلام
از این کد استفاده کن من قبلا کلی دنبالش گشتم ولی بلاخره خودم درستش کردم


ereg_replace("[^_؟?A-Za-z0-9 \ا\ب\پ\ت\ث\ج\چ\ح\خ\د\ذ\ر\ز\ژ\س\ش\ \ض\ط\ظ\ع\غ\ف\ق\ک\گ\ل\م\ن\و\ه\ی\ك\ آ\ي\ئ\_\]", "", $str);


ereg_replace("[^_؟?A-Za-z0-9 \ا\ب\پ\ت\ث\ج\چ\ح\خ\د\ذ\ر\ز\ژ\س\ش\ \ض\ط\ظ\ع\غ\ف\ق\ک\گ\ل\م\ن\و\ه\ی\ك\ آ\ي\ئ\_\]", "", $str);

اگر بخوای انگلیسی جایگزین بشه از توی تابع حذفشون کن و بر عکس

armin3000
سه شنبه 20 تیر 1391, 17:07 عصر
دوستان منم فکر کنم مشکلی مشابه همین سوال رو دارم. تابع truncate رو می خوام استفاده کنم اما توی شمارش حروف و کاراکترهای فارسی مشکل داره و درست عدد رو برنمیگردونه. فکر میکنم هر کاراکتر فارسی رو ۳-۴ تا میشماره!!؟ ولی واسه انگلیسی درسته.
ممنون میشم اگه راهی به ذهنتون میرسه بگین. مد کدنویس نیستم و اطلاعات زیادی از php ندارم.