انتقل إلى محتوى الدرس

Arabic UTF-8 Safety with mb_substr حماية النصوص العربية متعددة البايت بـ mb_substr

ابحث واقتطع النصوص بدقة في PHP 8 باستخدام strpos وsubstr وmb_substr ودوال PHP 8 الحديثة str_contains وstr_starts_with.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

مع النصوص العربية والعالمية المرمزة بـ UTF-8، استخدم دائماً mb_strpos() وmb_substr() ليتم حساب الفهارس والأطوال بالأحرف الحقيقية وليس بالبايتات الخام.

  • يشغل كل حرف عربي في ترميز UTF-8 بايتين؛ لذا فإن substr($ar, 0, 3) تأخذ 3 بايتات (حرفاً ونصف) فتُتلف الحرف الثاني!
  • تقتطع mb_substr($ar, 0, 3, "UTF-8") أول 3 أحرف عربية كاملة وسليمة.
  • تُرجع mb_strpos($ar, $word, 0, "UTF-8") الفهرس الحرفي الصحيح للتطابق.

الكلمة العربية المكونة من 7 أحرف تشغل 14 بايت في UTF-8؛ وتقتطع mb_substr(..., 0, 2, "UTF-8") أول حرفين عربيين بأمان (4 بايتات).

PHP
<?php
$arabicCity = "\xD8\xA7\xD9\x84\xD9\x82\xD8\xA7\xD9\x87\xD8\xB1\xD8\xA9";

$byteLen = strlen($arabicCity);
$charLen = mb_strlen($arabicCity, "UTF-8");
$prefix = mb_substr($arabicCity, 0, 2, "UTF-8");

echo "Bytes: $byteLen | Chars: $charLen\n";
echo "Prefix bytes: " . strlen($prefix) . "\n";