متوفر أيضًا بلغات أخرى: English · Español · Português · Français
مولّد روابط tel: ولماذا لا يصحّ tel:555-1234
ابنِ رابط tel: مطابقًا، وقارن اثنين منها بخوارزمية التكافؤ في RFC 3966.
ما رابط tel:؟
معرّف tel: هو الطريقة التي تسلّم بها صفحةُ الويب رقمَ هاتف إلى ما يُجري المكالمات في جهاز القارئ. تضعه في href فيُطلب الرقم عند اللمس؛ هذا يعرفه الجميع. وما لا يكاد أحد يعرفه أن لـtel: قواعدَ نحوية حقيقية يعرّفها RFC 3966، وأن الصيغة التي يعرضها كل شرح تقريبًا لا تطابقها.
وللقواعد صيغتان. فالرقم العالمي يبدأ بعلامة زائد وليس فيه إلا أرقام عشرية — tel:+96279123456 — ويقوم بذاته في أي مكان من العالم. أما الرقم المحلي فلا يبدأ بزائد، وتوجب القواعد أن يحمل معامل phone-context يقول أين يصحّ: tel:863-1234;phone-context=+1-914. وليس هذا المعامل زينةً اختيارية، بل هو داخل اشتقاق local-number نفسه، فـtel:555-1234 المجرّد ليس معرّف tel: ناقصًا، بل ليس معرّف tel: أصلًا.
وهذه الصفحة تحلّل ما تعطيها إياه وفق تلك القواعد، وتقول أي الصيغتين هو وما معنى كل جزء، وتكتب الصيغة المعيارية، وتجيب — على حدة — هل المعرّفان رقم واحد وفق قواعد المقارنة في المعيار نفسه.
طريقة الاستعمال
- ألصق معرّف tel:، أو اكتب رقمًا وراقب تغيّر الحكم. وأزرار الأمثلة الخمسة تُحمّل حالات حقيقية، أولها ذلك غير الصالح الذي يكتبه الجميع. واسم المخطط لا يفرّق بين حالتي الأحرف، فـTEL: يُحلَّل كذلك.
- اقرأ التفاصيل والملاحظات. فلوحة التفاصيل تفصل الرقم كما كُتب عن الرقم المستعمل في المقارنة، وتقول هل phone-context نطاقٌ أم رقم، وهو ما يغيّر طريقة مقارنته. والملاحظات أمور صحيحة لكن يحسن معرفتها، وليست أخطاءً قط.
- استعمل لوحة المقارنة للسؤال الذي لا تجيب عنه النصوص. ألصق معرّفين فيطبّق عليهما قواعد RFC 3966 الخمس. وفي أمثلتها اثنان يبدوان مختلفين وهما رقم واحد، وزوجٌ يفترق بمعامل واحد فليس كذلك.
لماذا يسقط tel:555-1234، وماذا يُكتب بدله
الجزء المعني من ABNF ثلاثة أسطر. فجزء المشترك إما global-number وإما local-number؛ وglobal-number أرقامٌ ومعاملات اختيارية؛ وlocal-number يُكتب local-number-digits ثم معاملات ثم context ثم مزيد من المعاملات. ولما كان context واردًا هناك بلا أي شرط، وكان معرَّفًا بأنه النص «;phone-context=» يتبعه واصف، فالرقم المحلي الخالي منه لا اشتقاق له ببساطة.
وللإصلاح وجهان يفضّل المعيار أحدهما. فالقسم 5.1 يقول إن كل الأرقام يجب أن تستعمل الصيغة العالمية إلا إذا تعذّر تمثيلها بها — فالجواب الأول أن تكتب الرقم بعلامة زائد ورمز الدولة والباقي. ولا يُلجأ إلى الصيغة المحلية مع إلحاق سياق بها — إما اسم نطاق يعرّف خطة الترقيم وإما بادئة عالمية مثل +962 — إلا حين يتعذّر التعبير عن الرقم عالميًا حقًا، وذلك حال التحويلات داخل مقسم خاص، والأرقام القصيرة، وأرقام الطوارئ.
ويحسن التصريح بما ينكسر وما لا ينكسر. فالهاتف سيطلب tel:555-1234 عادةً على أي حال، لأن برنامج الطلب ليس مدقّقًا وإنما يفعل الواضح. والثمن أن المعرّف لا يحمل أي معلومة عن خطة الترقيم التي تنتمي إليها تلك الأرقام، فكل ما يحتاج إلى تفسيره لا إلى طلبه — دليلٌ، أو نظام إدارة عملاء، أو بوابة اتصال بنقرة، أو أي شيء يقارن سجلّين — إنما يخمّن. والقواعد إنما وُضعت لإزالة ذلك التخمين.
قواعد المقارنة التي تخطئها النصوص
يعرّف القسم 4 من RFC 3966 متى يتكافأ معرّفا tel:، وهو خوارزمية حقيقية لا مطابقة نصوص. فلا بد أن يكونا من صيغة واحدة. ولا بد أن تتساوى الأرقام بعد حذف كل الفواصل المرئية — فالشرطة والنقطة والقوسان جزء من القواعد وإنما وُضعت لتُقرأ، ومن ثمّ فـtel:+1-555-0100 وtel:+15550100 رقم واحد. ويُقارَن phone-context بوصفه اسم مضيف إن كان نطاقًا، ورقمًا رقمًا إن كان عددًا، فتتطابق EXAMPLE.COM. مع example.com بينما يُقارَن العددي بعد حذف الفواصل. وتُقارَن المعاملات بأسمائها مهما كان ترتيب ورودها. والمقارنة كلها لا تفرّق بين حالتي الأحرف.
وثمة قاعدة تفاجئ: إن ورد معامل في أحد المعرّفين دون الآخر فهما غير متساويين. فـtel:+15550100 وtel:+15550100;ext=1 رقمان مختلفان، وهذا صواب — فالتحويلة تعرّف طرفًا آخر — لكنه يعني أنك لا تستطيع حذف المعاملات التي لا تفهمها ثم مقارنة الباقي.
وثمة كذلك قاعدة ترتيب مُلزِمة لا يكاد شيء يتبعها. فالتحويلة أو العنوان الفرعي أولًا، ثم phone-context، ثم سائر المعاملات بالترتيب الأبجدي. ويذكر المعيار سببه في الفقرة نفسها: ليمكن مقارنة معرّف tel: محرفًا محرفًا، وهي طريقة SIP في مقارنتها. والصيغة المعيارية التي تطبعها هذه الصفحة تطبّق ذلك الترتيب.
حدود معلنة
هذه الأداة تفحص قواعد المعرّف لا غير. فلا علم لها هل الرقم موجود، ولا هل رمز الدولة حقيقي، ولا كم رقمًا تستعمل خطة الترقيم في تلك الدولة — فذاك عمل آخر تقوم به مكتبات مخصّصة لأرقام الهواتف تسندها قواعد بيانات، وهو متروك هنا عن قصد. وقد يكون المعرّف مطابقًا تمامًا ويبقى رقمًا لا يردّ عليه أحد.
وهي كذلك لا تخبرك هل سياق الرقم المحلي هو الصحيح، بل فقط أنه نطاق أو بادئة عالمية سليمة التركيب. وجواب التكافؤ هو جواب RFC 3966، وهو عن المعرّفات: فقد يصل معرّفان مختلفان إلى الهاتف نفسه في الواقع عبر توجيه لا سبيل لأي مقارنة نصية أن تعلمه.
وأمرٌ يحسن معرفته عن المنصّة: لا شيء من هذا يمنحك إياه المتصفح. فلما لم يكن tel من المخططات الخاصة في معيار URL، فإن new URL يعيد جزء المشترك كله مسارًا مبهمًا، ولا يتحقق من شيء — بل يقبل tel:555-1234 دون اعتراض — ومقارنة كائنَي URL بـhref تقول إن tel:+1-555-0100 وtel:+15550100 مختلفان. وليس هذا عيبًا: فمحلّل معرّفات عام يجيب عن سؤال عام. لكنه يعني أن كل ما تقوله هذه الصفحة لا بد أن يُحسب لا أن يُستعار.
لماذا هي مجانية؟
إنها قواعد نحوية ومقارنة من خمس قواعد، ومتصفحك ينفّذهما وأنت تكتب. ولا خادم في الأمر، فلا شيء يُحتسب ولا حساب يُنشأ.
ولا يُرفع شيء. والأرقام التي تلصقها تبقى في هذه الصفحة وحدها.