"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > PHP: الذهاب إلى وحدات البايت المتعددة

PHP: الذهاب إلى وحدات البايت المتعددة

تم النشر بتاريخ 2024-08-18
تصفح:429

PHP: Going multibytes

يمكن أن تكون الأحرف متعددة البايت صعبة في البرمجة.

تحذير

لم يتم تمكين mbstring افتراضيًا. تأكد من قراءة هذا الجزء من قبل.

لماذا تهتم بسلاسل متعددة البايت؟

يمكن أن يحتوي المستند على سلاسل متعددة البايت. في حين أن PHP لديها الكثير من المساعدات المفيدة للسلاسل، فإن هذه المساعدات ببساطة ليست مخصصة للسلاسل متعددة البايت.

من المحتمل أن يتسبب ذلك في حدوث أخطاء سيئة وأخطاء أخرى غير متوقعة، خاصة عند حساب الأحرف.

لهذا السبب تفضل استخدام Multibyte String Functions في PHP بدلاً من ذلك.

إلى جانب ذلك، ستكون وظائف السلسلة متعددة البايت الجديدة، مثل mb_trim وmb_ltrim وmb_rtrim متاحة في الإصدار 8.4 (الإصدار التالي من PHP في وقت كتابة هذا التقرير).

لماذا تتطلب بعض الأحرف بايتات متعددة؟

تستخدم اللغة الإنجليزية مجموعة أحرف ASCII، لذا فإن الحروف مثل r أو s تتطلب بايتًا واحدًا فقط.

في المقابل، تستخدم بعض اللغات أحرفًا تحتاج إلى أكثر من بايت واحد، على سبيل المثال، أحرف هان (يمكن أن تصل إلى 6 بايت!).

بعض الأمثلة

عد الأحرف

$strings = [
    "?????",
    "チャーミング",
    "González",
];

foreach ($strings as $string) {
    echo 'strlen:' . strlen($string) . ' vs. mb_strlen:' . mb_strlen($string) . PHP_EOL;
}

البحث عن الموقف

echo strpos("チャーミング", "ャ"); // gives 3
echo mb_strpos("チャーミング", "ャ"); // gives 1 because 1st position is 0

قطع السلسلة

echo substr("チャーミング", 3) . PHP_EOL;// ャーミング
echo mb_substr("チャーミング", 3);// ミング

التأثير على الأداء

قد تقرأ أن وظائف mbstring يمكن أن يكون لها تأثير كبير.

يمكنك أيضًا إعادة إنتاجه باستخدام البرنامج النصي التالي:

$cnt = 100000;

$strs = [
    'empty' => '',
    'short' => 'zluty kun',
    'short_with_uc' => 'zluty Kun',
    'long' => str_repeat('this is about 10000 chars long string', 270),
    'long_with_uc' => str_repeat('this is about 10000 chars long String', 270),
    'short_utf8' => 'žlutý kůň',
    'short_utf8_with_uc' => 'Žlutý kŮň',
];

foreach ($strs as $k => $str) {
    $a1 = microtime(true);
    for($i=0; $i 



المصدر: أخطاء PHP

وظائف mb_* أبطأ، ولكنها دائمًا مقايضة، ويجب أن يحدد السياق فقط ما إذا كان يجب عليك استخدام هذه المساعدات أو إنشاء أدوات مساعدة خاصة بك.

على سبيل المثال، إذا قمت باستبدال $cnt = 100000; بواسطة $cnt = 100؛ في البرنامج النصي أعلاه، لا تزال مساعدات mb_* أبطأ بشكل ملحوظ، ولكن التأثير النهائي قد يكون جيدًا في حالتك (على سبيل المثال، 0.008 مللي ثانية مقابل 0.004 مللي ثانية).

اختتم

يجب أن تأخذ في الاعتبار وحدات البايت المتعددة، خاصة في سياق متعدد اللغات، ولدى PHP أدوات مساعدة مدمجة لذلك.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/spo0q/php-going-multibytes-3b3b?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3