استبدال PHP للمتغيرات في السلسلة. باستخدام قوالب في PHP. ميزات للعمل مع رمز HTML

قيم السلسلة هي سلاسل نصية (صف لفترة وجيزة). سلسلة هي سلسلة من الأحرف الصفرية أو أكثر. تشمل الرموز الحروف والأرقام وعلامات علامات الترقيم رموز خاصة والفجوات.

يمكن تعريف السلسلة من قبل أربعة طرق مختلفة:

  • التنصيص
  • ونقلت واحدة
  • heredoc- بناء جملة
  • بناء الجملة nowdoC.

الصف في اقتباسات مزدوجة

خط في اقتباسات مزدوجة:

يمكن استخدام تسلسل التحكم في خطوط الأسعار المزدوجة. تسلسل التحكم - هذه هي أحرف خاصة مصممة لتنسيق الإخراج النصي. تتوفر تسلسل التحكم التالية في PHP:

الخاصية الرئيسية للخطوط في اقتباسات مزدوجة هي القدرة على معالجة المتغيرات داخل الصفوف.


الدولار تسجيل الدخول: \\ $ "؛

قد تحتوي الصفوف المبرمة في اقتباسات مزدوجة على أحرف ونقلية واحدة:

صدى "اقتباسات واحدة:" "؛

صف في اقتباسات واحدة (apostrophs)

سلسلة في اقتباسات واحدة:

$ str \u003d "سلسلة"؛ صدى "سطر واحد كبير يمكن تقسيمه إلى عدة خطوط صغيرة حتى يكون أكثر ملاءمة للقراءة"؛

على عكس الأسطر في اقتباسات مزدوجة وبناء جملة Heredoc، لا تتم معالجة تسلسلات المتغيرات والتحكم (للحصول على استثناء واحد)، مرفقة في علامات اقتباس واحدة. هذا يعني أنه سيتم تفسيرها كأحرف سلسلة تقليدية:

$ num \u003d 10؛ Echo "الرقم: $ الأسطوانات
الدولار تسجيل الدخول: \\ $ "؛

إلى الخط المرفق في اقتباسات واحدة، يمكن للمرء استخدام علامات اقتباس واحدة، تحتاج إلى أن تكون محمية باستخدام خطوط مائلة عكسية (\\ "). إذا كنت بحاجة إلى كتابة الخط المائل العكسي، فأنت بحاجة إلى تكراره (\\\\):

صدى "الداخل تستخدم \\" اقتباسات واحدة \\ "؛ صدى "مائل عكسي: \\\\"؛

قد تحتوي الصفوف المبرمة في اقتباسات واحدة على أحرف اقتباسات مزدوجة:

صدى "اقتباسات مزدوجة:" "؛

Heredoc- بناء جملة

Heredoc- بناء جملة طريقة بديلة سجلات السلسلة.

السلسلة المحددة باستخدام بناء جملة HEREDOC يعمل بالإضافة إلى سلسلة موجودة في علامات اقتباس مزدوجة. الفرق بين HEREDOC والصف في اقتباسات مزدوجة هو أن استخدام HEREDOC ليست هناك حاجة إلى درع اقتباسات مزدوجة.

يبدأ بناء جملة HEREDOC بثلاثة أحرف<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. فورا بعد المعرف، يجب نقل الترجمة إلى سلسلة جديدة، لا توجد أحرف أخرى بالإضافة إلى الترجمة إلى سلسلة جديدة بعد أن لا يجب أن يكون المعرف، وإلا سيحدث خطأ. بعد ذلك، يذهب محتوى سلسلة مباشرة. بعد محتوى السلسلة، في خط منفصل، يجب تحديد معرف إغلاق (كما هو التالي<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

nowdoc- بناء الجملة

NowDoc-Syntax وكذلك Heredoc هو وسيلة بديلة لتسجيل الصفوف.

تعمل السلسلة التي تم تحديدها باستخدام بناء جملة NOWDOC بالإضافة إلى سلسلة موجودة في علامات اقتباس واحدة. الفرق بين NOWDOC وسلسلة في اقتباسات واحدة هو أن استخدام NOWDOC ليست هناك حاجة إلى درع علامات اقتباس واحدة.

يشبه بناء جملة NOWDOC HEREDOC الفرق الذي يجب أن يتم إرفاق معرف الافتتاح بالضرورة في عروض أسعار واحدة:

$ num \u003d 10؛ صدى صوت.<<<"some_id" Число: $num some_id;

معالجة المتغيرات في الخطوط

هناك نوعان من بناء جملة المعالجة المتغيرة في الخطوط: سهل و معقد.

بناء الجملة بسيط - هذا هو عندما يتم تحديد اسم المتغير في السلسلة كما هو.

عندما يجتمع المترجم الترفيهي علامة الدولار، يبدأ في التحقق بالتتابع ما إذا كانت جميع الأحرف اللاحقة أحرف صالحة في الاسم المتغير. وبالتالي، لتشكيل اسم المتغير الصحيح، فإنه يلتقط الكثير من الشخصيات قدر الإمكان:

$ str \u003d "العالم!"؛ صدى "مرحبا $ str"؛

بناء الجملة المعقدة - هذا هو عندما يكمن اسم المتغير في أقواس مجعد.

منذ ذلك الحين، لمعالجة متغير في سلسلة، يلتقط المترجم الترقيلي الكثير من الأحرف ممكن، قدر الإمكان عندما يكون المترجم غير قادر على تحديد ذلك بشكل مستقل حيث ينتهي الاسم المتغير:

$ sport1 \u003d "سوف"؛ $ Sport2 \u003d "القدم"؛ صدى "أحب $ Sport1ball و $ Sport2ball"؛

في هذه الحالة، لن يتم تحقيق النتيجة المرجوة، لأن المترجم سيعتمد الرياضة 1 دولار كجزء من الاسم المتغير $ Sport1ball، والتي لا وجود لها.

لتحديد برنامج مترجم مفصل بشكل صريح حيث ينتهي الاسم المتغير، من الضروري إدخال اسم المتغير في الأقواس المجعد:

$ sport1 \u003d "سوف"؛ $ Sport2 \u003d "القدم"؛ صدى "أحب ($ Sport1) بول و ($ Sport2) بول."؛

يمكن أن يكون علامة الدولار أمام الدعامة وبعد ذلك:

$ sport1 \u003d "سوف"؛ $ Sport2 \u003d "القدم"؛ صدى "أحب $ (Sport1) بول و ($ Sport2) بول."؛

سلسلة

تسلسل هو مزيج من صفين أو أكثر في واحد كبير. مزيج يحدث باستخدام مشغل التسلسل -. (هدف). عند التسلسل، تتم إضافة كل سلسلة لاحقة إلى نهاية واحدة السابقة:

سيتم تحويل قيمة أي نوع جنبا إلى جنب مع السلسلة ضمنا إلى السلسلة ثم سيتم إجراء تسلسل:

"؛ صدى" الرقم: ". 1؛\u003e

في الآونة الأخيرة، يتم تخفيض مناقشة لغة PHP على Habré إلى القدرة على تصميم الأنظمة المعقدة التي لا تستطيع إلا أن نفرح. ومع ذلك، بعد مراجعة عشرات أطر الويب الأكثر اعترافا (zend Framework، Adept، CakePhp، Codeigniter، الطرف، Symfony، Mzz وغيرها)، لقد اكتشفت مخلصا في بعض أوجه القصور المهمة من وجهة نظر التحسين الابتدائي.

من أجل أن يكون هذا الموضوع موجزا تقنيا، يتم تزيين النتائج في شكل أكثر صرامة، والتي يمكن أن تكون معقدة إلى حد ما عن طريق التصور.

لذلك، ذهبنا ... المهمة بسيطة للغاية: التجارب بمعدل تكوين خطوط من فرعية في اقتباسات واحدة ومزدوجة. من حيث المبدأ، ستكون هذه القضية ذات صلة لفترة طويلة بسبب ميزات معالجة الصف في PHP.

هناك العديد من المقالات حول التحسين الأساسي للبرامج النصية باللغة الروسية وفي لغات أخرى. تقول الخطوط أن هناك القليل، ولكن هناك حقيقة من "تحليل" الصفوف في اقتباسات مزدوجة للمتغيرات وأحرف التحكم (السابقة، كما هو الحال في الوثائق الرسمية). بناء على ذلك، من المنطقي أن نفترض أن استخدام الصفوف في اقتباسات مزدوجة في العمل سيكون أبطأ إلى حد ما من نفس العمليات التي تحتوي على فرعية في عروض الأسعار واحدة.

بالإضافة إلى استبدال المتغيرات إلى سلاسل وتسلسل المتغيرات مع ركائز، لا تزال تنفذ طريقة واحدة على الأقل لتشكيل السلاسل: العمل مع وظيفة Sprinthf. من المنطقي أن نفترض أن هذه الطريقة ستتخلى بشكل كبير عن "المعيار" بسبب الوظيفة غير الضرورية لوظيفة وفراق السلسلة الداخل.

الإضافة الوحيدة، قبل أن أقدم لك رمز البرنامج النصي: يجب أن تأخذ في الاعتبار خيارات محتملة للعمل مع اقتباسات مزدوجة: مع مراعاة نمط الترميز البسيط وال "المتقدم". حقيقة أن المتغيرات هي في بداية الخطوط لالتهاب الانتباه لا ينبغي أن تكون، ربما تكون أمثلة فقط:
$ String \u003d "$ _Server [" http_host "] - وليس إدارة منطقة أوليانوفسك. نحن نحب اللغة الروسية ولا تحب أولئك الذين ..."
و
$ String \u003d "($ _Server [" http_host "]) - وليس إدارة منطقة أوليانوفسك. نحن نحب اللغة الروسية ولا تحب أولئك الذين ..."

اختبار رقم واحد.
حسنا، يبدو أن جميع التحفظات مصنوعة - حان الوقت لإظهار نتائج العمل. يمكن العثور على شفرة المصدر في اختبار.

وفقا لقطات الشاشة، من الواضح أن فرضيتي لم يتم تأكيدها. السبب الوحيد المؤمن كان الافتراض حول العمل مع الصفوف من خلال Sprinthf. أسرع ميزات تعمل بدقة مع اقتباسات مزدوجة.

بعد تفكير قصير في الوضع، جاء التفسير في حد ذاته: الحقيقة هي أن السلسلة المرجعية التي قدمت فيها بدائل قصيرة للغاية: مرور المحلل بمثل هذا الخط هو القضية. ومع ذلك، حتى هنا يمكن أن نرى أن الاستبدال الأصلي للمتغير في السلسلة يعطي ميزة على "النمط المتقدم".
في نفس ضعف نهج التسلسل: تتجاوز حجم البيانات المدرجة حجم السلافة. أين تأتي النفقات العامة، يمكنك أن تقرأ في Habratope المذكورة بالفعل.

ومع ذلك، حتى هذه الأفكار اللازمة للتأكيد. للقيام بذلك، استغرق الأمر الاختبار الثاني مع التغييرات في الأسباب المذكورة المحتملة لسلوك لا يمكن التنبؤ بها (بالنسبة لي). على ما يبدو، ملتوية للغاية في الإصدار الخامس (أعترف، في الإصدار الخامس من PHP، قضيت اختبار واحد فقط: لتجاوز عناصر الصفائف).

اختبار رقم اثنين.
الفرضية الثانية: سيزيد تمديد السلسلة المرجعية في نهاية المطاف النسبة المئوية لوقت تشغيل وظائف الوظائف المرتبطة بتشكيل الصفوف في اقتباسات مزدوجة، بالنسبة لنتائج رقم الاختبار 1. نفس الموقف، من الناحية النظرية، يجب ملاحظتها من حيث تشغيل وظيفة Sprintf. هذا مستحق، أولا وقبل كل شيء، مع الحاجة إلى تحليل الصف وزيادة الوقت الذي يقضيه في هذا. في موقف بسلسلة من السلسلة الفرعية في اقتباسات واحدة، أعتقد أنه سيكون من نفس النتيجة كما هو الحال في الاختبار الأول، والذي سيعطي انخفاضا طفيفا في حصة وظيفة الوظيفة الخاصة ب Quotes_3 () بحلول وقت تشغيل البرنامج النصي بالكامل (ولكن ليس زيادة في الأداء).

الاستنتاجات، في الواقع إيجابية فقط وتأكيد الفرضية. مع زيادة طفيفة في السطر المرجعي، يظهر حمولة كبيرة، مما يؤدي إلى انخفاض في سرعة وظائف العمل مع عروض الأسعار المزدوجة و Sprinth.

كان الافتراض بالنسبة للخطوط الموجودة في اقتباسات واحدة صحيحة: بدلا من 36.75٪ من الوقت في الاختبار الأول، في المرتبة الثانية في الوظيفة الثانية () المرتبة 33.76٪ من وقت تنفيذ البرنامج النصي

القيمة العملية.
بلغة بسيطة، يتم تجريدها من البيانات، يمكننا أن نستنتج: كلما طالت الخط الذي من الضروري إجراء استبدال، كلما زاد احتمال وجود عملية Concontine أسرع من البحث عن متغير في علامات اقتباس مزدوجة. يمكن للمتطوعين محاولة تحديد معلمات إدراج الضرورة (عدد المتغيرات، طول الصف المرجعي، طول الصفوف في المتغيرات) بحيث تلبي المساواة في أوقات التنفيذ.

هنا، في الواقع، كل شيء. يبقى فقط لإضافة أنه لا يحدث في البرمجة (هذا هو العشاق ليقول "حفظ على التطابقات" (ج) الرف). معرفة هذه الدقيقة وأخذها في الاعتبار، يمكنك كتابة التعليمات البرمجية التي سيتم تحسينها على جميع مستوياتها؛)

ملاحظة:
تم تنفيذ الاختبارات باستخدام Zend Studio for Eclipse 6.0.0 (Debugger + Profiler المدرجة).
PHP 5.2.5 الإصدار
ديبيان لينكس OS.

PPS:
سأكون سعيدا إذا كان شخص ما يطرح نتائج الاختبار. أعتقد أن هذا سيجعل من الممكن تحديد تقييم أكثر موضوعية للحاجة إلى استخدام طريقة الاستبدال الأخرى في السلسلة. سأقدر أيضا النقد الصحي لأسلوب العرض والتصميم.

بالطبع، صور الصور، الملفات الصوتية، معلومات الفيديو، بيانات الرسوم المتحركة وتطبقها جزءا مهما من محتوى World Wide Web، ولكن جزء كبير من البيانات في الويب لا يزال يتم تقديمه في شكل تسلسلات رمز نصية مشابهة لهذا عرض. النوع الرئيسي من بيانات PHP مخصصة لعرض النص هو سلسلة.

وصف الصف في PHP

الصفوف هي سلسلة من الأحرف التي يمكن اعتبارها عدد صحيح واحد - المراد تعيينها للمتغيرات، التي يتم إرسالها كمدخلات إلى الوظيفة أو إرجاعها من الوظائف أو إخراجها كإخراج لعرضها على صفحة الويب الخاصة بالمستخدم. إن أبسط طريقة لتعيين سلسلة في رمز PHP هي أنه مؤمن تسلسل الأحرف في علامات اقتباس أو مفردة (") أو مضاعفة (")، على سبيل المثال، كما يلي:

$ myString \u003d "سلسلة بسيطة"؛ $ choothertring \u003d "خط آخر"؛

الفرق بين الاقتباسات الفردية والمزدوجة يرجع إلى مدى تعرض التفسير المكثف في رموز بيئة PHP المرفقة في علامات اقتباس، قبل إنشاء الصف نفسه. إذا تم إرفاق السلسلة في علاقات اقتباس واحدة، فلا يتم إجراء أي ترجمة تفسيرية تقريبا، وإذا تم إرفاق السلسلة في علامات اقتباس مزدوجة، في بيئة PHP، يتم سرد قيم جميع المتغيرات، والتي يتم سردها في الخط استبدال بعض تسلسل الأحرف الخاصة التي تبدأ برمز خط جديلة عكس ().

على سبيل المثال، بعد معالجة التعليمات البرمجية التالية المضمنة في صفحة الويب:

عد $ \u003d 13؛ $ string1 \u003d "في سلسلة \\" مرحبا، العالم! \\ "عدد الأحرف $.
"؛ $ string2 \u003d" في سلسلة \\ "مرحبا، العالم! \\" عدد الأحرف $.
"؛ eco $ string1؛ صدى $ string2؛

يمكنك الاعتماد على الحصول على نافذة المتصفح لهذا الإخراج:

القيم الساحرة باستخدام الأقواس المجعد

في معظم المواقف، يمكنك ببساطة تشغيل المتغير إلى سلسلة اقتباسات مزدوجة، وسيتم استبدال القيمة المتغيرة في السلسلة أثناء معالجة الصف بواسطة المترجم الفوري. ولكن في الحالتين الموصوفين أدناه، قد يكون ذلك هو أن مترجم الصف غير قادر على اعتماد حل معقول ويتطلب تعليمات إضافية من المطور.

الوضع الأول هو أن المترجم لا يمكن تحديد مكان انتهاء اسم المتغير، والوضع الثاني يحدث عندما يكون من الضروري استبدال السلسلة وليس قيمة متغير بسيط، ولكن قيمة التعبير. في هذه الحالات، يمكن للمطور تقديم وضوح عن طريق الدخول إلى اسم أو تعبير يتم معالجته في الأقواس المجعد (()).

على سبيل المثال، لا يواجه مترجم PHP صعوبة في معالجة التعليمات البرمجية التالية:

$ sport \u003d "الكرة الطائرة"؛ $ Play \u003d "أحب لعب الرياضة $."؛

في مثل هذه الحالات، يكتشف المترجم المزدوج الرمز $، وبعد ذلك يبدأ في جمع الرموز في الأساسيات الفرعية للكشف عن الاسم المتغير وإجراء مثل هذه التجمع حتى يتم العثور على المسافة أو النقطة أن المتغير الرياضي $ يتبع. لا يمكن أن تكون المساحات والنقاط جزءا من الاسم المتغير، لذلك يصبح من الواضح أن المتغير قيد النظر له اسم الرياضة $؛ بعد ذلك، تجد PHP المترجم بنجاح قيمة لهذه المتغير ("الكرة الطائرة") وبدائلها.

ولكن في بعض الأحيان لا توجد إمكانية لتعيين نهاية الاسم المتغير باستخدام مساحة أو نقطة. النظر في المثال التالي:

$ sport1 \u003d "سوف"؛ $ Sport2 \u003d "القدم"؛ $ Sport3 \u003d "سلة"؛ // تصاميم خاطئة $ play1 \u003d "أحب أن ألعب $ Sport1ball."؛ $ play2 \u003d "أحب لعب $ Sport2bol."؛ $ play3 \u003d "أحب أن ألعب $ Sport3ball."؛

في هذه الحالة، لن يتحقق التأثير المرغوب فيه، نظرا لأن مترجم PHP سينظر في سلسلة $ Sport1 كجزء من الاسم المتغير SPORT1B $، والذي، على ما يبدو، لا يتم تعيينه بأي قيمة. بدلا من ذلك، من الضروري تطبيق مثل هذا الإدخال:

// التصميم الصحيح $ play1 \u003d "أحب اللعب ($ sport1) bol."؛ $ play2 \u003d "أحب اللعب في ($ sport2) bol."؛ $ play3 \u003d "أحب اللعب ($ sport3) bol."؛

يعمل هذا الإدخال على فكر PHP إلى الإشارة إلى أنه يجب حساب قيمة التعبير فقط باسم المتغير المرفقة في الأقواس المجعد قبل القيم.

لأسباب مماثلة، لا يتم استخدام مترجم PHP، إذا لم يتم استخدام الأقواس المجعد، صعوبات عند استبدال قيم التعبيرات المعقدة بأسماء متغيرة، مثل الطعون لعناصر صفائف متعددة الأبعاد ومتغيرات كائنات. القاعدة العامة هي أنه إذا كان قوسا مفتوحا (() يتبع القوس المفتوح (() بشكل مباشر، فإن مترجم PHP يحسب قيمة التعبير باسم المتغير يصل إلى هدف إغلاق ())، ثم يلد قيمة الناتجة في السلسلة. (إذا كانت هناك حاجة إلى أن القيمة الحرفية تظهر في السطر ($، فيمكن توفيرها عن طريق وضع الركود التغذية قبل كل من هذه الأحرف، \\).

الرموز وفهارس الرموز في الخطوط

على عكس بعض لغات البرمجة الأخرى في PHP، لا يوجد نوع رمزي منفصل لا يتطابق مع نوع السلسلة. بشكل عام، والوظائف التي تتطلب بلغات أخرى لاستخدام المعلمات الفعلية الرمزية، في لغة PHP مصممة للحصول على صفوف مع الطول 1.

يمكن تنفيذ اختيار الأحرف الفردية من السلسلة من خلال تحديد رقم التسلسل للشخصية التي تبدأ من الصفر، والتي يجب تحديدها في أقواس مجعد مباشرة خلف اسم متغير السلسلة. مثل هذه الرموز تمثل فعلا خطوط رش واحدة. على سبيل المثال، تنفيذ الرمز التالي:

$ myString \u003d "الضعف"؛ ل (مؤشر $ \u003d 0؛ مؤشر $< strlen($myString); $index++) { $char = $myString{$index}; print("$char$char"); }

ينتج عن نافذة متصفح من هذا الإخراج في نافذة المتصفح:

من الواضح، في كل مرة تمرير دورة، يتم عرض كل رمز سلسلة مرتين. تقوم الدالة Strlen () بإرجاع طول السلسلة.

العمليات مع سلاسل

يتم توفير عمليات سلسلة من السلسلة في PHP: عملية مع نقطة التشغيل (.)، أو عملية تسلسل، وعملية مع نقطة علامة عملية وعلامة على المساواة (. \u003d)، أو عملية تسلسلات ومهالة. النظر في المثال التالي:

$ string1 \u003d "هذا جزء"؛ $ string2 \u003d "خطوط"؛ / / يقتصر على الصدى سلسلة String1 String1. "بسيط". $ string2. "
"؛ //" هذا الجزء من خط بسيط "// تسلسل وتخصيص سلسلة $. \u003d" بسيط "؛ // أي ما يعادل $ string1 \u003d $ string1." بسيط "؛ $ string1. \u003d $ string2؛ صدى $ string1؛ //" هذا جزء من خط بسيط "

تجدر الإشارة إلى أنه في المثال أعلاه، لا يتم نقل مشغل الصدى الأول إلى العديد من المعلمات الفعلية السلسلة؛ يتم إرسال المعلمة الفعلية سلسلة واحدة فقط، تم إنشاؤها نتيجة لتسلسل أربعة أسطر. يتم تعيين الخطوط الأولى والثالثة باستخدام المتغيرات، والسرور الثانية والرابعة هي خط حرفي محتمل في اقتباسات مزدوجة.

الهيكل النحوي للمستند المرفق (HEREDOC)

بالإضافة إلى الهياكل النحوية للأسلحة في اقتباسات واحدة ومزدوجة، في لغة PHP هناك طريقة أخرى لتحديد سلسلة تسمى الهيكل النحوي للمستند المرفق (HEREDOC)وبعد نظرا لأنها تحولت، تعد هيكل النحوي مشابه أداة مريحة للغاية لوضع شظايا نصية كبيرة يتم استبدالها بمتغيرات، لأن المستخدم يتخلص من الحاجة إلى تعيين علامات اقتباس داخلية باستخدام أحرف خاصة. هذه الطريقة مريحة بشكل خاص عند إنشاء صفحات تحتوي على نماذج HTML.

تشغيل العملية المستخدمة في الهيكل النحوي للمستند المرفق (<<<). За этим знаком должна непосредственно следовать метка (не заключенная в кавычки), которая обозначает начало многострочного текста. Интерпретатор PHP продолжает включать в состав значения переменной следующие строки до тех пор, пока снова не появится эта же метка в начале строки. За заключительной меткой может следовать необязательная точка с запятой, а какие-либо другие символы после метки не допускаются.

النظر في المثال التالي:

سلسلة $ \u003d.<<

eot؛ سلسلة ECHO $؛

يرجى ملاحظة أنه لا ينبغي الإشارة إلى كلمة EOT النهائية الموضحة أعلاه عن طريق المسافة البادئة، وإلا فسيتم اعتبارها تنتمي إلى النص بالإضافة إلى ذلك. كملصق، ليس من الضروري استخدام كلمة "EOT"، يمكن أن يكون لها اسم أي اسم يطابق القواعد المعتادة لمتغيرات التسمية في لغة PHP.

يتم إجراء استبدال القيم المتغيرة باستخدام نفس الطريقة تماما كما عند استخدام الخطوط المرفقة في علامات اقتباس مزدوجة. تتمثل ميزة مريحة في المستند المرفق في أن النص المشار إليه بهذه الطريقة يمكنك إدخال علامات اقتباسات دون استخدام أي أحرف تحكم، وهذا لا يؤدي إلى إكمال سابق لأوانه من تكوين السلسلة. يعرض المثال أعلاه أعلاه نموذج HTML أبسط:

وظائف السلسلة

توفر لغة PHP عددا كبيرا من الوظائف المتنوعة لمعالجة السلاسل وتحويلها. إذا كان لديك أي وقت مضى تحتاج إلى إنشاء وظيفتك الخاصة التي تقرأ ويعالج رمز السلاسل وراء الرمز لتشكيل سطر جديد، فكر أولا في ما إذا كانت المهمة المماثلة قد تنشأ قبل أي شخص من قبل. وإذا اقترح الحدس أن مثل هذا الاحتمالية موجود، فقد يكون له أيضا وظيفة مدمجة تحل المهمة. لمزيد من المعلومات حول وظائف السلسلة، اتصل ب https://php.net/manual/ru/ref.strings.php.

يعرض هذا القسم الوظائف الأساسية لفحص واقارن و تعديل وإخراج الأوتار. من أجل إتقان حقا وسيلة التلاعب لغات PHP، يبدو أنه يحتوي على معلومات سريعة على الأقل مع كل ما يوصف به في هذا القسم. يمكن العثور على وصف للميزات المصممة للعمل مع تعبيرات منتظمة في المقالة التالية.

التحقق من سلسلة

ما هي الأسئلة المتعلقة بالطرز في معظم الأحيان للبحث عن إجابة؟ الأول في قائمة الأسئلة هو مسألة ما طول السلسلة؛ للرد عليه، يتم استخدام وظيفة Strlen ()، اسمها تخفيض من طول السلسلة - طول السلسلة. مثال على تطبيق هذه الوظيفة أدناه:

$ erstr \u003d "hello world!"؛ $ russtr \u003d "سلسلة بسيطة"؛ Echo $ Enstr. "-". الرموز ($ Enstr). "الرموز
"؛ صدى $ روستر." - ".strlen ($ Russtr)." الشخصيات "؛

ينتج عن تنفيذ هذا الرمز الإخراج الغامض التالي:

كما ترون، للحصول على سلسلة "Hello World!" كانت النتيجة صحيحة، ولكن بالنسبة لسلسلة "صف بسيط" يؤدي إلى 27 حرفا غير صحيح. ما هو الحال؟ والحقيقة هي أن وظيفة strlen () تؤمن بايت، وليس الرموز. في الحالة الأولى، جميع الشخصيات في السلسلة هي اللغة الإنجليزية، I.E. قدمها ترميز ASCII ويتم ترميزها بواسطة 1 بايت. في الحالة الثانية، يحتوي الخط على أحرف روسية ترميزها بواسطة 2 بايت (UTF-8). لتجنب مشاكل في المستقبل عند العمل مع وظائف السلسلة، في PHP، استخدم وظائف الترميزات متعددة البياضات بدءا من بادئة MB_. هذا يعني أنه في المثال السابق، من الضروري استبدال وظيفة Strlen () Strlen () على MB_STRLEN () وتحديد الترميز بشكل صريح:

صدى $ Rus_str. "-". mb_strlen ($ rus_str، "utf8"). "الرموز"؛

البحث عن الرموز والفرشاة

السؤال التالي بشأن الخطوط هو أنها تحتوي على. على سبيل المثال، تتيح لك وظيفة Stropos () العثور على رقم موضع حرف معين في السلسلة، إن وجدت:

$ erstr \u003d "hello world!"؛ صدى "رمز" L ":" .التراس ($ Enstr، "L")؛ // 2.

المواقف المتعلقة باستخدام وظيفة stropos () تنتمي إلى تلك الحالات التي يمكن أن تصبح حصانة لغة PHP لأنواعها مصدرا للمشاكل. إذا لم يتم العثور على المباراة، فستظهر الدالة قيمة خاطئة، وإذا يتزامن الرمز المطلوب مع الحرف الأول جدا في السلسلة، فإن الوظيفة ترجع 0 (نظرا لأن العد التنازلي من مواقع الأحرف في الصف يبدأ ب 0، و ليس 1). يتوافق كلا من هذه القيم مع القيمة الخاطئة عند استخدامها للتحقق من الحالة المنطقية. تتمثل إحدى الطرق للتمييز بين هذه القيم في تطبيق عملية مقارنة الهوية (العملية \u003d\u003d\u003d، تم إدخالها من إصدار PHP4)، والتي ترجع قيمة حقيقية فقط إذا كانت معاملاتها هي نفسها والرجوع إلى نفس النوع. يمكن استخدام عملية المقارنة الخاصة بالهوية للتحقق مما إذا كانت القيمة التي تم إرجاعها هي 0 (أو لها قيمة خاطئة)، دون مخاطرة، مربكة قيمة الإرجاع مع القيم الأخرى التي يمكن أن تصبح هي نفسها بعد إحضار النوع.

يمكن أيضا استخدام ميزة Strepos () للبحث عن فرعية، وليس رمز واحد. للقيام بذلك، يكفي تعيين كخليط متعدد المراحل، وليس سلسلة موجزة واحدة. بالإضافة إلى ذلك، في نداء هذه الوظيفة، يمكنك تحديد معلمة عدد صحيح إضافي يشير إلى موضع بدء البحث.

يمكنك أيضا البحث في الاتجاه المعاكس، من نهاية السلسلة إلى البداية. للقيام بذلك، استخدم وظيفة Strrpos (). (لاحظ أنه في اسم هذه الوظيفة هناك حرف إضافي ص، وهو تخفيض من كلمة عكسية - عكس.) تقبل هذه الميزة سلسلة كمعلمة يجب أن يتم فيها إجراء البحث، والرذاذ المرغوب فيه سلسلة، وبعد ذلك ترجع الموقف الأخير. إدخال المعلمة الثانية في المعلمة الأولى. (على عكس الدالة stropos () في وظيفة strrpos ()، يجب أن يتكون الخط المطلوب فقط من حرف واحد.) بعد تطبيق هذه الميزة بنفس المعلمات كما هو الحال في المثال السابق، سيتم العثور على موقف آخر:

$ erstr \u003d "hello world!"؛ صدى "رمز" L ":" .stropos ($ Enstr، "L")؛ // 9 بسبب يتم إجراء البحث من نهاية الخط

مقارنة

هل تطابق السلسلة مع هذه السلسلة؟ على ما يبدو، غالبا ما يتعين على المدونة البحث عن الإجابة أيضا على هذا السؤال، خاصة عندما تضطر إلى معالجة بيانات الإدخال التي أدخلها المستخدم النهائي.

تتكون طريقة البحث عن استجابة لاستجابة سؤال حول ما إذا كانت السلاسل هي نفسها، تتكون في استخدام عملية مقارنة بسيطة للمساواة (\u003d\u003d)، والتي توفر تفتيشا على المساواة ليس فقط خطوط، ولكن أيضا أرقام. عند استخدام العملية \u003d\u003d، تعتبر سطرين نفسها، إذا كانت تحتوي على تسلسل متطابق تماما من الأحرف. في الوقت نفسه، لا يتم تنفيذها على الامتثال للتعريف الأكثر صرامة لنفس الخطوط، على سبيل المثال، الشروط التي يتم تخزينها هذه الخطوط في نفس العنوان في الذاكرة، ولكن حالة الحروف (بمعنى آخر، تؤخذ في الاعتبار ما إذا كانت الحروف مقارنة برأس المال أو أحرف صغيرة).

نتائج المقارنة بين اثنين من الصفوف باستخدام العملية \u003d\u003d (أو العمليات المناسبة< и >) يمكنك الوثوق به فقط إذا كانت كلا المعاملتين صفوفا ومن المعروف أنه لا يوجد تحويل من النوع. ويمكن دائما موثوقة نتائج التحقق باستخدام وظيفة STRCMP () الموصوفة أدناه.

أهم ميزة مقارنة الصف، والتي يتم بها تنفيذ المبلغ الرئيسي للعمل هو strcmp (). تأخذ هذه الميزة سطرين كمعلمات ويقارن بايت بواسطة بايت حتى يكتشف الفرق. بعد ذلك، ترجع الدالة رقما سالبا إذا كان السطر الأول أصغر من الثانية، والرقم الإيجابي إذا كان السطر الثاني أقل من الأول. إذا كانت السلاسل متطابقة، فإن وظيفة strcmp () ترجع الصفر.

تعمل وظيفة STRCASECMP () صالحة لنفس المبدأ، باستثناء ذلك عند مقارنتها بالمساواة، لا تؤخذ حالة الحروف في الاعتبار. على سبيل المثال، اتصل بوظيفة strcasecmp ("مهلا!"، "مهلا!") يجب أن تعود صفر.

يبحث

تتيح لك وظائف المقارنة الموصوفة حديثا معرفة ما إذا كان سطر واحد يساوي سطر آخر. ولتحديد ما إذا كان سطر واحد موجود في الآخر، يتم استخدام وظيفة Stros () الموصوفة أعلاه، أو وظيفة StrStr () والوظائف المشابهة لها.

تأخذ ميزة STRSTRSTR () السلسلة كمعلمات يجب أن يتم فيها تنفيذ البحث والسلسلة المرغوبة (بالترتيب المحدد). في حالة النجاح، ترجع هذه الوظيفة جزءا من السطر، والذي يبدأ بالإدخال الأول من السلسلة المطلوبة (ويتضمن السلسلة المرغوبة). إذا لم يتم العثور على هذه السلسلة، فستظهر الدالة قيمة خاطئة. يوفر جزء التعليمات البرمجية التالي أمثلة لتطبيق هذه الميزة:

$ str \u003d "hello world!"؛ $ findstr \u003d "العالم"؛ صدى "الكشف" $ findstr."في خط المصدر:" .strstr ($ str، $ findstr)؛

بالإضافة إلى وظيفة strcmp ()، تحتوي الدالة STRSTRSTR () إصدارا غير حساس للتسجيل، والذي يحتوي على اسم Stristr () الاسم (حرف I في هذا الاسم هو تخفيض من كلمة غير حساسة - غير حساسة). تعمل وظيفة Stristr () مطابقة لدولة STRSTR () في جميع النواحي، باستثناء ذلك عند مقارنة، يتم التعامل مع الحروف الصغيرة كحرف كحرف.

أخذ العينات الفرعية

يتم تنفيذ العديد من وظائف سلسلة PHP أعلاه صفوف من عمليات القطع وإدراجها. تحت القطع، تعني عينة جزء من الخط، وتحت الإدراج - تعديل انتقائي للسلسلة. يجب أن يؤخذ في الاعتبار أنه حتى الوظائف الإدراجية (معظم الأحيان) لا تعدل السلسلة المحددة كمعلمة الإدخال. عادة، تعرض هذه الوظائف نسخة معدلة وترك المعلمة الأصلية دون تغيير.

أسهل طريقة لتحديد جزء من السطر هي استخدام وظيفة Substr ()، والتي ترجع سلسلة جديدة تحتوي على جزء من الرمز المركزي من الخط القديم. كمعلمات، تأخذ وظيفة Substr () السلسلة (التي يتم أخذ عينات منها عينة السلسلة الفرعية)، عدد صحيح (الموضع الذي يبدأ فيه السلسلة الفرعية المطلوبة) ومعلمة ثالثة صحيحة اختيارية تحدد طول السلسلة الفرعية المطلوبة. إذا لم يتم تحديد المعلمة الثالثة، فمن المفهوم أن تستمر السلسلة الفرعية حتى نهاية الصف. (يجب أن نتذكر أنه عند استخدام هذه الوظيفة، يبدأ ترقيم الوظائف في السلسلة مع الصفر، وليس من الوحدة، كما هو الحال، كما هو الحال في جميع معلمات وظائف PHP، والذي يشير إلى مواقع رقمية في الأسطر.) على سبيل المثال:

$ str \u003d "hello world!"؛ echo mb_substr ($ str، 7، 3، "UTF8")؛ // "سلام"

والمعلمة مع تعيين الموضع الأولي، والمعلمة ذات طول التعيين قد تكون سلبية، ولكن في كل من هذه الحالات، فإن المعنى السلبي له معنى مختلف. إذا كان الموضع الأولي سالب، يتم تحديد موضع الرمز الأولي للسلسلة الفرعية بواسطة العد التنازلي من نهاية السطر، وليس عددا مباشرا من بداية السلسلة. (يشير الموقف الأولي المساوي إلى -1 إلى أن العد التنازلي يبدأ الرمز الأخير، فإن القيمة -2 تشير إلى الرمز قبل الأخير، إلخ)

بناء على ذلك، سيكون من الممكن افتراض أن الطول السلبي يتضمن أيضا أن السلسلة الفرعية يجب تحديدها بواسطة العد التنازلي من الرمز الأولي، وليس مرجعا مباشرا، ولكن الوضع مختلف. البيان وفقا للشخصية في الموضع الأولي هو الحرف الأول في الخط الذي تم إرجاعه (وليس الأخير)، يبقى دائما عادلا. بدلا من ذلك، تعني المعلمة ذات القيمة السلبية ذات الطول السلبي أن الحرف النهائي يحددها العد التنازلي من النهاية، وليس مرجع مباشر من الموضع الأولي.

فيما يلي بعض الأمثلة ذات المعلمات الإيجابية والسلبية:

$ str \u003d "hello world!"؛ صدى mb_substr ($ str، 7، 3، "utf8"). "
"؛ //" العالم "صدى mb_substr ($ str، -4، 3،" UTF8 ")."
"؛ //" العالم "صدى mb_substr ($ str، 0، -5،" UTF8 ")."
"؛ // "مرحبا"

إزالة الفجوات وعلامات التبويب من الصفوف

من وجهة نظر رسمية، فإن ختم الوظيفة ()، Ltrim ()، وتقليم () هي وظائف للعمل مع ركائز (التي تذكرها إلى حد كبير بواسطة وظائف أخرى)، ولكن في الواقع تم تصميم الوظائف في الواقع لإزالة الأحرف غير الضرورية من الأسطر. وظائف ختم ()، LTRIM () وتقليم ()، على التوالي، إزالة المركبة الفضائية الموجودة في النهاية، في البداية، في البداية، في النهاية، من السلسلة المشار إليها كمعلمة السلسلة الوحيدة.

بالإضافة إلى المسافات، تقوم هذه الوظائف بإزالة المراكعات الأخرى المشابهة لأولئك المشار إليها عن طريق تسلسل التحكم، \\ n، \\ r، \\ t و \\ 0 (رموز نهاية السطر، علامات التبويب وأحرف صفرية تستخدم لتعيين نهاية الخط في البرامج في ج).

في لغة PHP، عادة ما يتم اتخاذها لتطبيق إزالة الأحرف الفضائية في نهاية السطر مع ختم الاسم ()، ولكن لوظيفة متطابقة تحتوي على اسم Rtrim أكثر تعبيرا () يمكن أيضا أن تسبب أيضا. أخيرا، تجدر الإشارة إلى أن الوظيفة تقطع ()، على الرغم من حقيقة أن اسمها الذي يعني "قطع"، يبدو فظيعا للغاية، لا يضر بالمعلمة الأصلية الأصلية، والتي توفر القيمة السابقة.

استبدال السلسلة

توفر جميع الوظائف التي تمت مناقشتها أعلاه للعمل مع الصفوف جزءا عينة من معلمة الإدخال، وليس تكوين سطر جديد بالكامل. يناقش هذا القسم وظائف STRE_REPLE () و Substr_Replace () و Substr_Replace () المقصود لهذا الغرض.

تتيح لك وظيفة Str_Replace () استبدال كل إدخال فرعية محددة معينة إلى سلسلة أخرى. تتطلب هذه الميزة ثلاث معلمات: السلسلة التي يجب تنفيذ البحث فيها، يتم استبدال السلسلة الفرعية بعد اكتشافها، والسلسلة التي يجب تطبيقها لاستبدالها. النظر في المثال التالي:

$ str \u003d "hello world!"؛ eco str_replace ("MIR"، "Planet"، $ Str)؛ // "مرحبا كوكب!"

يتم إجراء الاستبدال فيما يتعلق بجميع إدخالات Substring الموجودة في شريط البحث. إذا تم استخدام المثال أعلاه لاستبدال عنوان المدينة في موسوعة قديمة قديمة، بعد تحويل النص بأكمله للموسوعات إلى سلسلة PHP الفردية، يمكن إجراء مثل هذه البديلة في تمريرة واحدة.

كما هو موضح أعلاه، تحدد الدالة Str_Replace () جزءا من سطر المصدر المراد استبداله عن طريق البحث عن إدخال السلسلة الفرعية المرغوبة في خط المصدر؛ في المقابل، تختار وظيفة Substr_Replace () دورا يتم استبداله بموقعه المطلق. تستغرق هذه الميزة ما يصل إلى أربعة معلمات: سلسلة يجب أن يتم فيها تنفيذ بديل، سلسلة تستخدم كحل بديل، موضع بدء استبدال (معلمة اختيارية) يتم استبدال طول الصف. النظر في المثال التالي:

recho substr_revlace ("abcdefg"، "-"، 2، 3)؛ // "AB-FG"

يتم استبدال صف جزء CDE بعلامة واحدة. يرجى ملاحظة أنه في هذه الحالة، سمح له باستبدال السلسلة الفرعية بسلسلة من طول آخر. إذا تم حذف المعلمة ذات طول التسمية، فمن المفترض أن يتم استبدال الجزء بالكامل من الخط بعد الموضع الأولي.

تأخذ الدالة Substr_Replace () أيضا معلمات سلبية كتعيين الموضع الأولي والطول، والذي يتم تفسيره بنفس الطريقة كما هو الحال في وظيفة Substr ()، والتي يتم وصفها أعلاه. من المهم أن نتذكر أنه نتيجة للعمليات التي يتم تنفيذها باستخدام وظائف Str_Reply و Substr_replace، لا تزال السلسلة المصدر دون تغيير.

أخيرا، هناك عدد من الميزات الأقل استخداما على نطاق واسع التي تشكل خطوط جديدة من القديم. تقوم الدالة Strrev () بإرجاع سلسلة جديدة يتم فيها وضع أحرف سلسلة الإدخال بالترتيب العكسي. تأخذ وظيفة STR_REPEAT () سلسلة واحدة ومعلمة عدد صحيح واحد وإرجاع السلسلة التي يتم فيها جمع العدد المحدد من نسخ مع معلمة السلسلة:

صدى str_repeat ("ABC"، 3)؛ // abcabcabc.

وظائف لتحويل حالة الحروف

تتيح لك هذه الوظائف تحويل الحروف الصغيرة إلى الأحرف الكبيرة والعكس. تقوم الدالة Strtolower () بإرجاع سلسلة يتم تحويلها إلى كل الأحرف التي تم تحويلها إلى صغيرة. لا يهم ما إذا كانت السلسلة الأولية تحتوي على أحرف كبيرة للغاية أو أحرف كبيرة وصغيرة. على سبيل المثال:

$ str \u003d "hello world!"؛ Echo MB_Strolower ($ Str، "UTF8")؛ // "مرحبا بالعالم!"

إذا كنت قد واجهت بالفعل حاجة إلى إجراء فحص كبير من النماذج، فقد يلاحظ أن وظيفة Strtolower () ليست سوى وسيلة مريحة لمعالجة عناوين البريد الإلكتروني الواردة من هؤلاء المستخدمين الذين ما زالوا لا يعرفون أن الحروف سجل في هذه العناوين لا تؤخذ في الاعتبار. لا تقل مفيدة هي ميزات أخرى تتعلق الفئة قيد الدراسة.

تقوم الدالة Strtoupper () بإرجاع سلسلة يتم فيها تحويل جميع الحروف إلى أحرف كبيرة. كمثال، يمكنك إحضار جزء التعليمات البرمجية التالية:

$ str \u003d "hello world!"؛ صدى mb_strtupper ($ str، utf8 ")؛ // "مرحبا بالعالم!"

تحول الدالة UCFirst () فقط رسالة السلسلة الأولى فقط إلى الحالة العليا، وتحول الدالة UCWords () إلى الحرف العلوي من كل كلمة في الصف. لا تتمتع الوظيفة UCWords () ولا UCFirst () وظيفة مماثلة لترميز متعددة البياضات، غير متوافقة مع الصفوف التي تحتوي على سيريلية.

وظائف لإدخال شخصيات التحكم

واحدة من مزايا لغة PHP هي أنه يمكن تطبيق يوم تبادل البيانات مع أي نظام تقريبا. الأموال مثل هذا عرفي للنظر كنوع من "الغراء البرنامج". في هذا الدور، يتم استخدام لغة PHP للتفاعل مع خوادم قاعدة البيانات وخوادم LDAP وتبادل البيانات من خلال مآخذ الاتصال واتصال HTTP نفسه. في كثير من الأحيان، يتم تنفيذ هذا التفاعل من خلال إنشاء سلسلة رسالة مسبقا (مثل طلب قاعدة البيانات)، ثم نقل إلى هذه الرسالة إلى برنامج المستلم. ولكن في البرامج غالبا ما تعلق معنى خاصا لبعض الرموز، وبالتالي يجب عليهم تحويل شخصيات التحكم. هذا يعني أن برنامج المستلم يعطى للنظر في مثل هذه الرموز كجزء حرفي من الخط، وعدم تطبيق معالجة خاصة لهم.

تتيح العديد من المستخدمين من أجل التعامل مع هذه المشكلة استخدام ما يسمى ب "وضع علامات الاقتباس السحرية"، والذي يضمن تحويل الأسعار إلى التحكم في الأحرف قبل إدراج الصفوف إلى قاعدة البيانات. ولكن إذا كان هذا وضع المعالجة غير ممكن أو غير مرغوب فيه، فعليك استخدام أدوات قديمة جيدة إدراج رموز خط جديلة عكس وإزالة هذه الأحرف اللاحقة.

تقوم ميزة AddSlashes () بتحويل علامات اقتباس مفردة ومزدوجة، ورموز النقص العكسي والأحرف الصفرية في تسلسل التحكم باستخدام رمز الملاحظات، حيث يتم تحويل الأحرف المحددة عادة للتحكم في تسلسلات عند إعداد استعلامات قاعدة البيانات:

Escapedstring \u003d AddSlashes ("صف مع" اقتباسات ".")؛ $ Query \u003d "إدراج في اختبار (اقتباس) القيم (" $ Escapedstring ")؛ نتيجة $ \u003d MySQLI_QUERY (رابط $، الاستعلام $) أو يموت (mysql_error ())؛

يتيح لك تنفيذ هذا الرمز منع التفسير الخاطئ لموظفي SQL الذي سيتم فيه النظر في السلسلة على أنها تنتهي مباشرة قبل الرسالة "K". وبعد عينة هذه البيانات، من الضروري استخدام الدالة Stripslashes () لإزالة رموز جديلة عكسية.

تحول الدالة Quotemeta () مجموعة أوسع من الأحرف في تسلسل التحكم. كل هذه الشخصيات عادة ما يكون لها معنى خاص في سطر الأوامر UNIX: "." "،" "،" + "،" * "،"؟ "،" ["،"] "،" ^ "،" ("،" $ "و") ". على سبيل المثال، تنفيذ الرمز التالي:

$ str \u003d "هذه الأحرف ($، *، ^) تحتاج إلى تحويلها."؛ Echo Quotemeta ($ Str)؛

يعرض هذه السلسلة:

وظائف الإخراج على الجهاز الخارجي وفي السلسلة

تتم طباعة التصميمات الرئيسية المستخدمة في الإخراج والصدفة، والتي تم اعتبارها بالتفصيل في وقت سابق. الطريقة القياسية لإخراج القيم المتغيرة للجهاز الخارجي هي تمكين أسماء هذه المتغيرات في سلسلة اقتباسات مزدوجة (عند معالجة المترجم الذي يتم استبداله بمتغيرات)، ثم قم بنقل هذه السلسلة إلى تصميم الطباعة أو الصدى وبعد

إذا كان الإخراج المنسق أكثر دقة، فيمكنك استخدام لغة PHP و Sprintf () و Sprintf () المقدمة بواسطة PHP. هاتين الوظيفتين تأخذ نفس المعلمات: خط خاص من التنسيق، متبوعا بعدد تعسفي من المعلمات الأخرى يتم استبداله في المواقع المرغوبة في سلسلة التنسيق للحصول على النتيجة. الفرق الوحيد بين وظائف printf () و sprintf () هو أن printf () يرسل السلسلة الناتجة مباشرة إلى الجهاز الخارجي المستخدم للإخراج، ويعزز SPRINTF () السلسلة الناتجة نتيجة لتنفيذها.

بضع كلمات لبرامج المبرمجين ذوي الخبرة العاملة في C. هذا الإصدار من وظيفة SPRINTF () يختلف قليلا عن الإصدار C أن وظائف SPRINTF () غير مطلوبة لتوفير خط موزز يتم فيه تسجيل الرقم القياسي فيه، منذ PHP توزيع الفوري الذاكرة للحصول على السلسلة الناتجة نيابة عن المستخدم.

الصعوبة الرئيسية المرتبطة باستخدام هذه الوظائف هي تحديد سلسلة التنسيق بشكل صحيح. تظهر كل حرف في سلسلة التنسيق في القيمة الناتجة في النموذج المباشر، باستثناء الأحرف٪ والأحرف التي تتبع هذه الأحرف على الفور. يشير رمز٪ إلى بداية مواصفات التحويل، مما يشير إلى كيفية عرض أحد المعلمات إلى الجهاز الخارجي الذي يتبع سلسلة التنسيق.

بعد علامة٪ هناك خمسة عناصر هي جزء من مواصفات التحويل، والتي يتم وصفها أدناه، وبعضها اختياري: ملء، المحاذاة، الحد الأدنى من العرض، الدقة والنوع:

  • للإشارة إلى ما إذا كان الرقم سلبيا، يتم تطبيق تعيين اختياري في شكل علامة "ناقص" (-).
  • يمثل رمز التعبئة الوحيد (الاختياري) إما 0 أو مساحة (). يستخدم هذا الرمز لملء أي مساحة، والتي في غيابها ستكون فارغة، لكن المستخدم أصر على تخصيص المستخدم (إعداد الكثير من قيمة المعلمة الحد الأدنى للعرض). إذا لم يتم تحديد رمز التعبئة هذا، افتراضيا، يتم ملء المسافات.
  • يظهر رمز المحاذاة الاختياري (-) ما إذا كان يجب محاذاة قيمة الإخراج إلى الحافة اليسرى أو اليمنى. إذا تم تحديد هذا الرمز، فسيتم محاذاة القيمة على طول الحافة اليسرى، وفي غيابها تطبق المحاذاة على طول الحافة اليمنى.
  • القيمة الرقمية الاختيارية للحد الأدنى للعرض، والذي يشير إلى أن الحد الأدنى لعدد المواقف يجب أن يشغل الناتج. (إذا كان إخراج القيم يتطلب المزيد من المواقف الرمزية أكثر مما يشير إلى أن قيمة الإخراج تتجاوز هذه الحدود.)
  • محدد الدقة الاختياري، مصممة كأداة (.)، تليها رقم. يشير المواصفات إلى الدقة التي تقاس عدد المراكز العشرية بعد أن يتم عرض النقطة مع نقطة عائمة من الدقة المزدوجة. (لا يحتوي تطبيق هذه المواصفات على أي تأثير في إخراج البيانات بخلاف أرقام النقطة العائمة المزدوجة.)
  • حرف واحد يشير إلى كيفية تفسير نوع القيمة. يشير حرف F إلى أنه يجب عرض القيمة كرقم نقطة عائمة مزدوجة الدقة، يشير رمز S إلى أن قيمة الإخراج يجب أن تنفذ في شكل سلسلة، وبقية الأحرف المحتملة (B، C، D، O، X، X) يقول إن القيمة يجب تفسيرها على أنها عدد صحيح وإخراج في تنسيقات مختلفة. هذه التنسيقات هي B، التي تدل على الإخراج بتنسيق الأرقام الثنائية، ج - الإخراج الناتج للرمز بقيمة مناسبة لرمز ASCII، O، والتي تتطلب إخراج بتنسيق أرقام الأوكتان، X - للإخراج في شكل الأرقام السداسية عشرية (مع أرقام مربكة من الأرقام في الحالة الصغيرة)، و X - لإخراج الأرقام السداسية عشرية، حيث يتم استخدام الحروف الكبيرة كتعيينات حرف.

فيما يلي مثال على إخراج نفس الرقم مع نقطة عائمة من الدقة المزدوجة بعدة طرق مختلفة:

 10F. 
٪ -10F.
٪ 2.2F، قيمة $، القيمة $، قيمة $، قيمة $)؛\u003e

إنه يؤدي إلى هذه النتائج:

مصممة في هذا المثال

...
إنه واصف HTML الذي يشير إلى المتصفح الذي يجب أن تنسيق الكتلة المرفقة بهذا الواصف في حرفيا، دون ضغط عدة مسافات في واحد، إلخ.

ميزات للعمل مع رمز HTML

توفر لغة PHP لعدد من وظائف التلاعب مع الخطوط التي تحتوي على خصائص البيانات من الويب. تظهر معلومات عامة حول هذه الوظائف في الجدول أدناه:

وظائف سلسلة مصممة للعمل مع رمز HTML

دور وصف
htmlspecialchars () يقبل سلسلة كمعلمة وإرجاع سلسلة يتم فيها استبدال أربعة أحرف ذات قيمة خاصة في لغة HTML خطوط خاصة. يتم استبدال كل من هذه الأحرف بمكون HTML المقابل، والذي، بعد نشر النص، يتم استبدال الصفحة في المتصفح بالرمز الأولي. الرمز واستبدالها بواسطة مكون ورمز "(رمز الاقتباس المزدوج) - رمز" رمز "< - < а символ > - >
htmlenties () يؤدي المزيد من المعالجة الكاملة مقارنة ب HTMLSPecialChars ()، I.E. يحل محل مكون HTML ليس حرفا خاصا فقط، ولكن أيضا يتم استبدال جميع الأحرف التي يتم استبدال مكون HTML.
get_html_translation_table () يقبل أحد الثوابت الخاصة (HTML_SPECIAL_CHARS أو HTML_ENTIVITY) وإرجاع جدول التحويل المستخدم بواسطة ميزات HTMLSPecialChars () أو HTMLENTIES (). جدول التحويل هو مجموعة مفاتيحها سلاسل الأحرف، والقيم المقابلة - الصفوف المصممة لاستبدالها.
nL2BR () يأخذ سلسلة كمعلمة وإرجاع نفس السلسلة، ولكن مع واصفات
إدراجها أمام جميع رموز نهاية السلسلة (\\ n، \\ r أو \\ r \\ n). تحدث الحاجة إلى استخدام هذه الميزة، على سبيل المثال، إذا كان ذلك مطلوبا لتوفير نفس القسم على فقرات النص المعروضة في المتصفح، كما هو الحال في النص المصدر
strip_tags () يقبل سلسلة كمعلمة وأداء كل شيء على ذلك يعتمد على تكوين سلسلة مكررة من جميع واصفات HTML وجميع الواصفات PHP

يجسد البيانات باستخدام خوارزمية MD5

خوارزمية MD5 هي خوارزمية معالجة السلسلة يتم استخدامها لتوليد ما يسمى Digest، أو توقيع رقمي لأي سلسلة يتم إرسالها كمعلمة. تقوم الخوارزمية بإنشاء خط طول ثابت يعتمد على خط الإدخال، يتكون من 32 حرفا سداسي عشري (0-9، A-F). النتائج التي تم تشكيلها باستخدام خوارزمية MD5 لها خصائص مفيدة للغاية موضحة أدناه:

  • تضمن خوارزمية MD5 دائما تشكيل خط الإخراج دون تغيير عند تلقي نفس خط الإدخال، لذلك لا يمكن استخدام التشفير باستخدام MD5 لتخزين كلمات المرور.
  • نتائج استخدام خوارزمية MD5 لها طول ثابت وتوزيعها بشكل موزعة بشكل موحد على النطاق الكامل للقيم المحتملة.
  • يمكن تشكيل سلسلة الإدخال المقابلة لخوارزمية MD5 خط الإخراج المحددة، أو يتم إنشاء خطين مدخلين، ومعالجةها من شأنها أن تؤدي إلى نفس سلسلة الإخراج، ولكن فقط في ظل ظروف معينة.

يتوفر تنفيذ خوارزمية MD5 في لغة PHP كدالة MD5 ()، والتي تأخذ الخط كبيانات الإدخال وتنتج نتائج في شكل هضم 32 حرفا. على سبيل المثال، تنفيذ الرمز التالي:

$ str \u003d "hello world!"؛ صدى "رمز التجزئة لسلسلة" $ str ": ".md5 ($ str)."
"$ str \u003d" مرحبا، العالم! "؛ صدى" رمز التجزئة للحصول على سلسلة "$ str": ".md5 ($ str)."
"$ str \u003d" Hello World "؛ صدى" رمز التجزئة لخط "$ Str": ".md5 ($ str)."
";

ينتج عن نافذة المتصفح من هذه النتائج في نافذة المتصفح:

بالطبع، في هذه الحالة، يتم تذكير جميع خطوط الدخول إلى بعضها البعض، ولكن خطوط الإخراج لا تملك أي تشابه مرئي. بالإضافة إلى ذلك، فإن مجموعة من قيم الإخراج الممكنة ضخمة للغاية (1632)، وبالتالي فإن احتمال صدفة معالجة نتائج معالجة خطين مختلفين (يتم إنشاء نفس MD5) صغير للغاية.

نظرا للميزات المميزة أعلاه من خوارزمية MD5، يمكن استخدام القيم التي تم الحصول عليها من ذلك لحل مجموعة متنوعة من المهام، بما في ذلك تلك الموضحة أدناه:
حساب المجموع الاختباري للرسالة أو الملف
للتحقق مما إذا لم يحدث تشويه الرسائل أثناء النقل، يمكنك المرور مع رسالة Digest MD5، وبعد تلقي الرسالة مرة أخرى لتشكيل Digest MD5. إذا لم تتزامن نسختان من Digest، فهذا يعني أنه سمح بالتشويه أثناء الإرسال.
السيطرة على ما إذا كانت محتويات الملف لم يتغير
هذه المهمة تشبه مهمة حساب المجموع الاختباري. غالبا ما تستخدم خوارزمية MD5 لأداء مثل هذه العملية في آلات البحث، إذا كنت بحاجة إلى التحقق بشكل دوري ما إذا كانت صفحة الويب قد تغيرت، وإذا لزم الأمر، قم بإجراء إعادة الفهرسة. والحقيقة هي أنه لمزيد من المصالحة، فمن الأسهل بكثير تنظيم تخزين DIGEST MD5 من الملف المصدر بأكمله.
تقسيم مجموعة متنوعة من الصفوف أو الملفات على مجموعة فرعية
لحل مشكلة تقسيم مجموعة من السلاسل في مجموعات فرعية مختارة عشوائيا، يمكنك حساب Digest MD5 من كل سطر، خذ أول أحرف ست عشرية، تحويلها إلى الرقم، للحصول على الرصيد من تقسيم هذا الرقم حسب الوحدة النمطية بواسطة عدد المجموعات الفرعية N واستخدام هذه البقايا بمثابة مجموعة فرعية من المجموعة الفرعية. التي يجب تسجيل هذا الخط.

بالإضافة إلى وظيفة MD5 ()، يتم توفير وظيفة MD5_File () في لغة PHP، والتي تقبل اسم الملف كمعلمة وإرجاع قيمة MD5 الإسكان المطابقة لمحتويات الملف.

الوظائف التي تهدف إلى تقييم تشابه السلاسل

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

إذا كان معيار تقييم التشابه يفحص التشابه كتابة، فيمكنك التقديم متري levenshtein.وبعد تأخذ ميزة Levenshtein () صفينين كمعلمات وإرجاع البيانات التي يتعين على الحد الأدنى لعدد خيارات الإضافة والحذف واستبدال الأحرف لتحويل سطر واحد إلى آخر. النظر في مثال:

صدى Levenshtein ("تيم"، "الوقت")؛ // 1 صدى Levenshtein ("صبي"، "Chefboyardee")؛ // 9 Echo Levenshtein ("أبدا"، "ذكي")؛ // 2.

إذا تعتبر التشابه كمعيار، فسيتم اعتبار التشابه الصوتي، فمن الممكن استخدام وظائف SOLTEX () والميتافون () لتقييم التشابه. يتم أخذ كل من هذه الوظائف كمعلمة إدخال قيد النظر في السلسلة وإرجاع السطر الرئيسي مع تعيين نطق هذه الكلمة (والذي يعتبر الكلمة الإنجليزية). إذا كانت الكلمتين المستخدمة ك محتويات سلسلة الإدخال هي نفس قيمة الإخراج بالضبط، فيمكن أن تكون واضحة على قدم المساواة.

وظائف التحليل النحوي وكسر lexemes

في بعض الأحيان تكون هناك حاجة إلى توفير في البرنامج لتقسيم الصفوف إلى مكونات، يسترشد بتعريفها الخاص بما يجب اعتباره مكونا. تسمى عملية الفصل بين سلسلة طويلة أقسام إلى Lexemes. على وجه الخصوص، تعد هذه العملية جزءا من إجراء التفسير العام أو ترجمة أي برنامج كمبيوتر، بما في ذلك البرنامج في PHP. في لغة PHP، يتم توفير وظيفة خاصة لهذا الغرض - Strtok ().

تأخذ وظيفة Strtok () معلمين: سلسلة مخصصة للتحرر على LEXEMES، وسلسلة تحتوي على جميع الفروق (الرموز التي تعتبر حدود بين Leksmems). عند الاتصال أولا، يتم استخدام كلا المعلمين واستخدمت الوظيفة قيمة سلسلة، وهي أول LEX. لتحديد Lexing اللاحق، يتم إجراء نفس المكالمة، ولكن يتم استبعاد المعلمة مع سلسلة المصدر. تتذكر الوظيفة عنوان السلسلة المحددة في المعلمة الأولى، ويستخدمها كحل الحالي. بالإضافة إلى ذلك، تتذكر هذه الميزة حيث تم إيقاف المعالجة تحت المكالمة السابقة. النظر في المثال التالي:

الرمز المميز $ \u003d Strtok ("البرمجة النصية على شبكة الإنترنت مفتوحة المصدر HTML-Server-Server-Server"، "")؛ في حين (رمز $) (صدى $ المميز ".
"؛ $ رمز \u003d strtok (")؛)

مما يؤدي إلى استلام هذا الإخراج في نافذة المتصفح:

يتم تنفيذ قسم السطر الأصلي في المكان الذي توجد فيه كل فجوة.

تشكل وظيفة Strtok () Lexemes واحدة تلو الأخرى. يمكنك أيضا استخدام دالة Explode ()، والتي تنفذ إجراءات مشابهة تقريبا، لا تحسب أنها تحتفظ بجميع lexemes في صفيف واحد في وقت واحد. بعد تلقي lexemes الممثلة في شكل صفيف، يمكن إجراء أي عمليات معها، بما في ذلك الفرز.

تأخذ ميزة Explode () معلمين: خط تقسيم وسلسلة يجب تقسيمها إلى Lexemes. تقوم هذه الميزة بإرجاع صفيف، كل عنصر منها توجد فرعية تقع بين مثيلات الفاصل في سلسلة يتم فصلها. النظر في المثال التالي:

Exploderesult \u003d تنفجر ("و" واحد واثنين وثلاثي ")؛

مما يؤدي إلى مجموعة من explode_Result $ تحتوي على ثلاثة عناصر، كل منها سلسلة: "واحد"، "اثنان" و "ثلاثة". في هذا المثال بالذات، لم يتم العثور على حرف رأس مال واحد في أي من الخطوط الموجودة في الصفيف، لأن الفاصل وليس موجودا نتيجة لذلك.

تختلف سلسلة الفصل المستخدمة في وظيفة Explode () إلى حد كبير عن السلسلة باستخدام DemArchangers المستخدمة في وظيفة Strtok. الفاصل هو خط كامل، لذلك يجب العثور على جميع أحرف هذه السلسلة في السطر الأصلي بنفس الطريقة كما هو الحال في الفاصل بحيث يمكن اعتبار هذا الفاصل الكشف.

من ناحية أخرى، تضع سلسلة مع DemArchangers في دالة Strtok () العديد من الشخصيات الفردية، كل منها يعتبر محدد. هذا يعني أن الدالة Explode () تعمل بشكل أكثر انتقائيا، ولكنها أكثر عرضة للانتهاكات في العمل. على وجه الخصوص، إذا كان المساحة أو رمز نهاية الخط الوحيد، وهو جزء من الفاصل، سيتم تفويته بشكل عشوائي في صف طويل، ثم يمكن كسر كل عملية هذه الوظيفة.

تحتوي الدالة Explode () على وظيفة معكوسة له، مما يؤدي إلى تنفذ ()، والتي تأخذ معلمين: خط الاتصال (على غرار سطر الفصل في وظيفة Explode () و Array String مثل هذا بإرجاع وظيفة Explode () وبعد تقوم الدالة RESTRODE () بإرجاع سلسلة تم إنشاؤها عن طريق إدخال سطر ضابط بين كل ما في صف واحد يذهب إلى عناصر السلسلة في الصفيف.

(PHP 4، PHP 5، PHP 7)

str_replace - يستبدل جميع إدخال سلسلة البحث في سلسلة البديل

وصف

ترجع هذه الميزة سلسلة أو صفيف يتم فيه استبدال جميع عمليات البحث في الموضوع بالاستبدال.

إذا كنت لا تحتاج إلى قواعد بحث / استبدال معقدة (على سبيل المثال، تعبيرات منتظمة)، فإن استخدام هذه الوظيفة هو الأفضل preg_replace ().

قائمة المعلمات

إذا بحث واستبدال - صفائف، ثم str_replace () يستخدم كل قيمة من الصفيف المقابل للبحث والاستبدال في هذا الموضوع. إذا تم استخدام سلسلة فارغة كصفيف استبدال في صفيف استبدال أكثر مما كانت عليه في البحث، فسيتم استخدام سلسلة فارغة كصف بديل للقيم المتبقية. إذا كان البحث عبارة عن صفيف، والاستبدال هو سلسلة، فسيتم استخدام خط البديل هذا لكل عنصر صفيف البحث. الحال المعاكس ليس له معنى.

إذا كان البحث أو استبدال صفائف، فسيتم معالجة عناصرها من الأول إلى الأخير.

القيمة المطلوبة، المعروف أيضا باسم إبرة. (إبرة). لمجموعة متنوعة من القيم المرجوة، يمكنك استخدام صفيف.

يستبدل

سيتم استخدام قيمة الاستبدال لاستبدال القيم المرغوبة للبحث. لمجموعة متنوعة من القيم، يمكنك استخدام صفيف.

موضوع.

سلسلة أو صفيف الذي يعرف فيه البحث والاستبدال أيضا باسم كومة قش (كومة من القش).

إذا كان الموضوع عبارة، فسيتم إجراء البحث مع البديل على كل عنصر من عناصر الموضوع، وسوف تكون النتيجة أيضا صفيفا.

إذا مرت، سيتم ضبطه على مقدار البدائل.

القيم العودة

ترجع هذه الميزة سلسلة أو صفيف مع القيم المستبدة.

أمثلة

مثال # 1 أمثلة للاستخدام str_replace ()

/ / يعين
Bodytag $ \u003d str_replace ("٪ الجسم٪"، "أسود"، " " );

/ / يعين: HLL WRLD F PHP
$ حروف العلة \u003d صفيف ("a"، "e"، "أنا"، "o"، "u"، "o"، "e"، "o"، "U")؛
$ onlonconsonants \u003d str_replace (حروف العلة $ "،" "مرحبا العالم من PHP")؛

// يعين: يجب أن تأكل البيتزا والبيرة والآيس كريم كل يوم
جملة $ \u003d. "يجب أن تأكل الفواكه والخضروات يوم عيد الألياف.";
$ صحي \u003d صفيف ("الفواكه"، "الخضروات"، "الألياف")؛
$ لذيذ \u003d صفيف ("البيتزا"، "البيرة"، "الآيس كريم")؛

$ NewPhrase \u003d str_replace ($ صحي، $ لذيذ، جملة $)؛

/ / يعين: 2
$ Str \u003d str_replace ("LL"، ""، "Good Golly Miss Molly!"، عدد $)؛
eCHO $ \u200b\u200bعدد؛
?>

مثال # 2 أمثلة للحيل المحتملة مع str_replace ()

/ / إجراء استبدال
$ str \u003d. "سلسلة 1 \\ Nestro 2 \\ Rock 3 \\ R \\ Nestro 4 \\ n";
$ order \u003d صفيف ("\\ r \\ n"، "\\ n"، "\\ r")؛
$ استبدال \u003d "
" ;

// العمليات الأولى \\ r \\ n لتجنب استبدالها.
echo $ newstr \u003d str_replace (طلب $، استبدال $، $ str)؛

// يعرض F، لأن يتم استبدال A ب B، ثم B على C، وهكذا ...
// نتيجة لذلك، سيتم استبدال ه ب F، حيث يحدث الاستبدال من اليسار إلى اليمين.
$ Search \u003d صفيف ("A"، "B"، "C"، "D"، "E")؛
استبدل $ \u003d صفيف ("B"، "C"، "D"، "E"، "F"؛
$ الموضوع \u003d "أ"؛
echo str_replace (البحث $، استبدال $، موضوع $)؛

// العرض: appish الجوز (على السبب أعلاه)
رسائل $ \u003d صفيف ("أنا"، "O")؛
$ الفاكهة \u003d صفيف ("التفاح"، "الجوز")؛
$ text \u003d "أنا o"؛
$ خرج \u003d str_replace (رسائل $، الفاكهة $، نص $)؛
إخراج ECHO $؛
?>

ملاحظات

تعليق: هذه الميزة آمنة لمعالجة البيانات في النموذج الثنائي.

تحذير

استبدال الاستبدال

مثل str_replace () استبدال من اليسار إلى اليمين، ثم عند استخدام بدائل متعددة، يمكن أن يحل محل القيمة المدرجة مسبقا إلى أخرى. انظر أيضا أمثلة على هذه الصفحة.

تعليق:

هذه الميزة حساسة للسجل. يستخدم str_ire () لاستبدال، غير حساس للسجل.