تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ امیر صالحی
برعکس کردن حروف فارسی
محسن موحد حل شده توسط محسن موحد

سلام و احترام

 

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

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

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

سلام.

توابع کار با رشته‌های 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;

 

بهترین پاسخ
محسن موحد ۲۴ فروردین ۱۳۹۹، ۱۱:۵۵