برعکس کردن حروف فارسی

پرسیده شده
فعالیت 1483 روز پیش
دیده شده 1173 بار
0

سلام و احترام

 

من یه سری حروف فارسی داشتم و وقتی خواستم که اونا رو برعکس کنم با حروف (خرچنگ غورباقه) مواجه شدم.

برای مثال میخوام کلمه ( امیر ) به صورت برعکس و ( ریما ) دربیارم ولی خروجی اصلا مناسب نبود، هم خودم یه بار تابع‌شو نوشتم و هم از تابع strrev استفاده کردم ولی جوابی نگرفتم، لازم به ذکره که انکودینگ هم utf8 بود.

اگر راه حلی برای این مسئله داریم ممنون میشم بهم بگید.  

فایل پیوست

امیر صالحی
امیر صالحی

24 فروردین 99

4
حذف شده

سلام.

توابع کار با رشته های PHP بصورت پیش فرض، کاراکترهارو یک بایتی در نظر میگیرن. برای همین وقتی از رشته های یونیکد که multibyte هستند در داخل این توابع استفاده میکنید، نتیجه ی درستی نمیگیرید.

برای مثال وقتی از strlen استفاده میکنید، این تابع تعداد بایت های رشته رو برمیگردونه. بعد وقتی رشته ی انگلیسی میدید، نتیجه درسته و وقتی رشته ی فارسی میدید، میبینید نتیجه 2 برابره تعداد کاراکتر ها هست.(چون در اینجا هر کاراکتر دو بایتی هست.)

<?php
echo strlen('amir'); // output: 4

echo '<br/>';

echo strlen('امیر'); // output: 8

برای نتیجه ی درست باید از توابع multibyte استفاده کنید یعنی توابع mb_*

اما تابع mb_strrev رو خودتون باید پیاده سازی کنید. داخل PHP نیست. توابع mb_* رو اینجا ببینید.

<?php
$string = 'امیر';
$result = '';
for($i = mb_strlen($string, 'utf-8'); $i >= 0; $i--) {
    $result .= mb_substr($string, $i, 1, 'utf-8');
}

echo $result;

 

فایل پیوست

محسن موحد

توسط

محسن موحد

24 فروردین 99