كيفية الحصول على طول سلسلة تحتوي على مراجع الأحرف أثناء حساب مراجع الأحرف كحرف واحد؟

StackOverflow https://stackoverflow.com/questions/3933102

  •  30-09-2019
  •  | 
  •  

سؤال

كيف يمكنني الحصول على طول السلسلة التي تحتوي أيضًا على مراجع أحرف؟ أرغب في حساب عدد الأحرف التي سيتم عرضها فقط في المتصفح. يحب

$raw = "Stack&#00f9"    =  Length = 6  
$raw = "Stack12345"  = Length = 10  
$raw = "Stack&#00f9&#00f9" = 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)

لاحظ أن &#00f9 ليس مرجعًا صالحًا للحرف لأنه مفقود x أو X بعد، بعدما &# للتدوين السداسي عشر و ; بعد القيمة السداسية.

القي نظرة على mb_strlen

mb_strlen('string' , 'UTF-8');
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top