كيفية الحصول على طول سلسلة تحتوي على مراجع الأحرف أثناء حساب مراجع الأحرف كحرف واحد؟
-
30-09-2019 - |
سؤال
كيف يمكنني الحصول على طول السلسلة التي تحتوي أيضًا على مراجع أحرف؟ أرغب في حساب عدد الأحرف التي سيتم عرضها فقط في المتصفح. يحب
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
شكرا مقدما
المحلول
سأذهب مع:
$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');
على الرغم من أنني سأتساءل أولاً عن سبب وجود كيانات HTML داخل خيوطك ، بدلاً من معالجة السلاسل الفعلية لـ UTF-8 المشفرة.
أيضًا ، كن حذرًا في أن كيانات HTML الخاصة بك لا تتم كتابة بشكل صحيح (يجب أن تنتهي مع فاصلة منقوطة). إذا لم تقم بإضافة Semicolon ، فسوف تفشل أي وظائف متعلقة بالكيان ، وسوف تفشل العديد من المتصفحات في تقديم كياناتك بشكل صحيح.
نصائح أخرى
نظرًا لأن سلاسلك تحتوي على ترميزات حرفية من chars Unicode (بدلاً من أن تكون ، على سبيل المثال ، UTF-8 مشفر) ، يمكنك الحصول على الطول ببساطة عن طريق استبدالها بشار وهمية ، وبالتالي:
$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));
اذا هم كانوا مشفرة بشيء يفهمه PHP ، مثل UTF-8 ، يمكنك استخدامه mb_strlen()
تحفيز.
strlen
هي وظيفة سلسلة بايت واحدة تفشل على سلاسل Mutli-Blette حيث أنها تُرجع فقط عدد البايتات بدلاً من عدد الأحرف (حيث في الأوتار الواحدة البايت ، كل بايت يمثل حرفًا واحدًا).
لاستخدام السلاسل متعددة البايت strlen
نظير متعدد البايت mb_strlen
بدلاً من ذلك ولا تنس تحديد تشفير الحرف المناسب.
وللتوخّل على مراجع حرف HTML على أنها حرف واحد ، استخدم html_entity_decode
لاستبدالها بالأحرف التي يمثلونها:
$str = html_entity_decode('Stackù', ENT_QUOTES, 'UTF-8');
var_dump(mb_strlen($str, 'UTF-8')); // int(6)
لاحظ أن �f9
ليس مرجعًا صالحًا للحرف لأنه مفقود x
أو X
بعد، بعدما &#
للتدوين السداسي عشر و ;
بعد القيمة السداسية.
القي نظرة على mb_strlen
mb_strlen('string' , 'UTF-8');