يمكن أن تكون الأحرف متعددة البايت صعبة في البرمجة.
لم يتم تمكين 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 أدوات مساعدة مدمجة لذلك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3