PDA

View Full Version : جدا کردن کاراکترهای فارسی از رشته



ghiravani
جمعه 22 مهر 1390, 00:40 صبح
سلام.خسته نباشید.برای مثال یه رشته داریم به این صورت: "سلام"
میخوام این رشته رو داخل یه متغیر بریزم و هر کاراکتر رو با کمک یه خانه از آرایه نمایش بدم.اما نمیشه.برای کارکترهای انگلیسی میشه اما فارسی نه.
مثلا برای کارکتر های انگلیسی میشه از که زیر استفاده کرد:


<?php
$str = "ABCD";
echo $str[0]."<br/>";
echo $str[1]."<br/>";
echo $str[2]."<br/>";
echo $str[3];
?>

نتیجه میشه:
A
B
C
D

اما اگر همین کد بالا رو با متغیر فارسی داشته باشیم نتیجه میشه:


<?php
$str = "سلام";
echo $str[0]."<br/>";
echo $str[1]."<br/>";
echo $str[2]."<br/>";
echo $str[3];
?>






جالب اینجاست که اگر رشته ما مثلا "سلام" که 4 کارکتر داره رو با تابع strlen چک کنیم نتیحه 8 رو میده و برای اینکه هر کارکتر فارسی رو بشه جدا کرد باید این روش رو استفاده کرد:


<?php
$str = "سلام";
echo $str[0].$str[1]."<br/>";
echo $str[2].$str[3]."<br/>";
echo $str[4].$str[5]."<br/>";
echo $str[6].$str[7];
?>

نتیجه میشه:
س
ل
ا
م



اما مشکل زمانی هست که رشته ما دارای کارکتر های فارسی و انگلیسی هست.مثلا "سلام mamnoon خوبم"

دوستان بهترین راه حل برای این مشکل چیه؟؟؟ لطفا راهنماییم کنید که کارم خیـــــــــــــــلی گیره

ممنون

MSN_Issue
جمعه 22 مهر 1390, 12:12 عصر
سلام
این به دردتون میخوره ...


<?php
$string = 'asdadبصثبصثب';
echo '<pre>';
print_r(preg_split('/(?<!^)(?!$)/u', $string ));
echo '</pre>';
?>

tux-world
جمعه 22 مهر 1390, 12:53 عصر
برای این کاراکتر ها رو درست نشون نمیده چون یونیکد صفحه رو براش پاس نکردید

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

ghiravani
جمعه 22 مهر 1390, 13:53 عصر
ممنون اما صفحه رو یونیکد کردم.

ghiravani
جمعه 22 مهر 1390, 13:54 عصر
سلام
این به دردتون میخوره ...


<?php
$string = 'asdadبصثبصثب';
echo '<pre>';
print_r(preg_split('/(?<!^)(?!$)/u', $string ));
echo '</pre>';
?>



دوست عزیــــــــــــــــــــــ ــــــز واقعا ممنون.کارم راه افتاد بازم ممنون

tux-world
جمعه 22 مهر 1390, 17:00 عصر
در مورد این عبارت باقاعده‌ای که نوشتید یه توضیح مختصری میدین که چطور حرف به حرف جدا شده؟

MSN_Issue
جمعه 22 مهر 1390, 17:15 عصر
من ننوشتمش ... !
من سرچ کردمش ... !
http://www.php.net/manual/en/function.mb-split.php

web.designer
جمعه 22 مهر 1390, 17:28 عصر
سلام
این به دردتون میخوره ...


<?php
$string = 'asdadبصثبصثب';
echo '<pre>';
print_r(preg_split('/(?<!^)(?!$)/u', $string ));
echo '</pre>';
?>



دوستان توضیح میدید این کد چه جوری این کارو کرد ؟

aliphp1
سه شنبه 18 آبان 1395, 00:47 صبح
$string ='یک رشته فارسی';
$arr = array();
$strLen = mb_strlen($string, 'UTF-8');
for ($i = 0; $i < $strLen; $i++)
{
$arr[$i] = mb_substr($string, $i, 1, 'UTF-8');
}
var_dump($arr);