• 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کار با رشته‌های فارسی در متد post
#1
چرا برای جدا کردن مثلا کاراکتر نخست یک رشته فارسی که توسط متد post از صفحه دیگری دریافت می‌شود، باید دو کاراکتر اول را جدا کنیم؟
من این مشکل را دارم. انودینگ صفحه‌ها هم utf-8 است.

ممنون.
  پاسخ
تشکر شده توسط :
#2
چونکه Smile
شاید علت برمی گرده به اینکه کاراکتر های فارسی در هشت بیت بالاتر قرار می گیرند یا یه همچین چیزایی
  پاسخ
تشکر شده توسط :
#3
سلام،
نقل قول:چرا برای جدا کردن مثلا کاراکتر نخست یک رشته فارسی که توسط متد post از صفحه دیگری دریافت می‌شود، باید دو کاراکتر اول را جدا کنیم؟
من این مشکل را دارم. انودینگ صفحه‌ها هم utf-8 است.
عزیز بیشتر توضیح بدید.
وبلاگ: Yousha.Blog.ir

صدام: "اگر با ارتش شاه ایران طرف بودیم، یک ماهه جنگ را می بردیم"
http://gulfnews.com/opinion/thinkers/ira...i-1.500997
  پاسخ
تشکر شده توسط :
#4
محضه توضیح بیشتر:
ما می تونیم یک رشته رو به صورت آرایه در نظر بگیریم که ان اُمین کاراکتر رشته می شه ان منهای یک اُمین عضو آرایه
اما اگه رشته ی ما utf-8 باشه اونوقت کمی قضیه فرق می کنه
کد پی‌اچ‌پی:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>google</title>
</
head>

<
body>
<
div dir="rtl">
<?
php

$str1 
func1('ABCDEFGHI');
$str2 func1('ابپتثدذرز');
$str3 func2('ابپتثدذرز');

echo 
$str1.'<br>'.$str2.'<br>'.$str3.'<br>'.strlen('ابپتثدذرز').'<br>'.strlen('ABCDEFGHI');

function 
func1($str)
{
    for(
$i=0$i<strlen($str); $i++)$s .= $str[$i].' ';
    return 
$s;
}

function 
func2($str)
{
    for(
$i=0$i<strlen($str);){$s .= $str[$i].$str[$i+1].' '$i+=2;};
    return 
$s;
}
?>
</div>
</body>
</html> 
نتیجه:
کد:
A B C D E F G H I
ؠ? ؠ? ٠? ؠ? ؠ? ؠ? ؠ? ؠ? ؠ?
ا ب پ ت ث د ذ ر ز
18
9
توی این اسکریپت شاید بشه دید که طول یک رشته فارسی دوبرابر یک رشته انگلیسی هستش
فک کنم این همونه که میگن php به صورت داخلی از utf-8 پشتی بانی نمی کنه!!!
  پاسخ
تشکر شده توسط :
#5
در هر حالتی که شما یه رشته رو به صورت کدهای به غیر از ASCII داشته باشید بر اساس اینکه چه تعداد بیت رو اشغال می کنند در php توسط توابعی مثل substr شناسایی میشن. کاراکترهای ASCII یک بایت فضا رو می گیرند اما کاراکترهای فارسی که در انکودینگ UTF-8 قرار می گیرند دو بایت رو اشغال می کنه. در واقع توابعی مثل substr یا strlen بر اساس بیت کارشون رو انجام میدن و هر 8 بیت رو یک کاراکتر در نظر می گیرند.
برای اینکه با این مشکلات مواجه نشید باید از بسته mbstring استفاده بشه که توابعی مثل mb_substr یا mb_strlen رو در اختیار شما قرار میده
  پاسخ
تشکر شده توسط : oia zoghal sama01 meatza


پرش به انجمن:


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