سنناقش مخاطر المخرجات غير الصحية ونوفر طريقة آمنة لعرض المخرجات المنسقة.
لا يوجد خطر من تصفية الإخراج
إذا حصلت على مدخلات المستخدم ثم قمت بعرضها، فقد تؤدي إلى كسر صفحة الإخراج الخاصة بك، على سبيل المثال يمكن لشخص ما تضمين جافا سكريبت بشكل ضار في مربع الإدخال الذي يرسله:
هذا هو تعليقي
<script language="javascript:
تنبيه ("افعل شيئًا سيئًا هنا!')">.
بهذه الطريقة، حتى لو لم يكن المستخدم ضارًا، فإن بعض عبارات HTML الخاصة بك ستتضرر، مثل مقاطعة الجدول فجأة، أو عرض الصفحة بشكل غير كامل.
إظهار النص غير المنسق فقط
هذا هو الحل الأبسط، ما عليك سوى عرض المعلومات التي أرسلها المستخدم كنص غير منسق. استخدم الدالة htmlspecialchars() لتحويل كافة الأحرف إلى ترميز HTML.
على سبيل المثال، سيتم تحويل <b> إلى <b>، مما يضمن عدم إخراج علامات HTML غير المتوقعة في أوقات غير مناسبة.
يعد هذا حلاً جيدًا إذا كان المستخدمون يهتمون فقط بمحتوى النص غير المنسق. ولكن سيكون من الأفضل لو أعطيته بعض القدرة على التنسيق.
التنسيق باستخدام علامات التمييز المخصصة علامات
المستخدم الخاصة بالتنسيق
يمكنك توفير علامات خاصة ليستخدمها المستخدمون، على سبيل المثال، يمكنك السماح باستخدام [b]...[/b] للتأكيد على العرض، [i].. .[/i ] عرض مائل، ما عليك سوى إجراء عملية بحث واستبدال بسيطة: $output = str_replace("[b]"، "<b>"،
$output = str_replace("[i]"، " <i >", $output);
والأفضل من ذلك هو أنه يمكننا السماح للمستخدم بكتابة بعض الروابط. على سبيل المثال، سيتم السماح للمستخدم بإدخال [link="url"]...[/link]، والذي سنقوم بتحويله إلى عبارة <a href="">...</a>
في هذا الوقت ، لا يمكننا استخدام بحث بسيط، يجب إجراء الاستبدال باستخدام التعبيرات العادية:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">' ، $output);
تنفيذ ereg_replace() هو
العثور على السلسلة التي يظهر فيها [link="..."] واستبدالها بـ <a href="...">
[[:graph:]] تعني أي حرف غير فارغ يرجى الاطلاع على المقالات ذات الصلة للتعبيرات العادية.
توفر وظيفة format_output() في inputlib.php تحويل هذه العلامات. المبدأ العام هو:
يستدعي موقع China Network Management Alliance bitsCN.com htmlspecialchars() لتحويل علامات HTML إلى ترميزات خاصة، وتصفية علامات HTML التي لا ينبغي عرضها، وبعد ذلك، قم بتحويل سلسلة من علاماتنا المخصصة إلى علامات HTML المقابلة.
يرجى الاطلاع على الكود المصدري أدناه:
<?php
دالة format_output($output) {
/********************************************* ************************************
* يأخذ سلسلة خام ($الإخراج) ويقوم بتنسيقها للإخراج باستخدام خاص
* تم تجريد العلامات المشابهة لـ HTML
*************************************************************************************************************************************************************************** **********************************/
$output = htmlspecialchars(stripslashes($output));
/* فقرة جديدة */
$output = str_replace('[p]', '<p>', $output);
/* عريض */
$output = str_replace('[b]', '<b>', $output);
$output = str_replace('[/b]', '</b>', $output);
/* مائل */
$output = str_replace('[i]', '<i>', $output);
$output = str_replace('[/i]', '</i>', $output);bitscn_com لإدارة الشبكة
/* التنسيق */
$output = str_replace('[pre]', '<pre>', $output);
$output = str_replace('[/pre]', '</pre>', $output);
/* الكتل ذات المسافة البادئة (علامة الاقتباس) */
$output = str_replace('[indent]', '<blockquote>', $output);
$output = str_replace('[/indent]', '</blockquote>', $output);
/* المراسي */
$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="1"></a>', $output);
/* الروابط، لاحظ أننا نحاول منع جافا سكريبت في الروابط */
$output = str_replace('[link="javascript', '[link=" javascript', $output);
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">', $output);
$output = str_replace('[/link]', '</a>', $output);
إرجاع nl2br($output);
}
?>
بعض الملاحظات:
تذكر استبدال العلامة المخصصة لإنشاء سلسلة علامات HTML بعد استدعاء الدالة htmlspecialchars()، وليس قبل هذا الاستدعاء، وإلا فسوف يضيع عملك الشاق بعد استدعاء تدفق htmlspecialchars().
بعد
تحويلbitscn_com لإدارة الشبكة
، سيتم استبدال رمز HTML للبحث، على سبيل المثال، ستصبح علامات الاقتباس المزدوجة "".تقوم وظيفة nl2br() بتحويل أحرف إرجاع السطر وتغذية السطر إلى علامات <br>، والتي يجب أيضًا يكون بعد htmlspecialchars().
عند تحويل [links=""] إلى <a href="">، يجب عليك التأكد من أن المرسل لن يقوم بإدراج جافا سكريبت. هناك طريقة بسيطة لتغيير [link="javascript إلى [link=" javascript، بهذه الطريقة لن يحدث ذلك الاستبدال، فقط قم بعرض الرمز الأصلي.
Outlib.php
يستدعي test.php في المتصفح. يمكنك مشاهدة استخدام format_output()
ولا
يمكن استخدام علامة HTML العادية.
- هذا [i]خط مائل[/i]
- هذا [link=" http://www.phpbuilder.com"] رابط[/link]
- هذا هو [anchor="test"]مرساة، و[link="#test"]رابط[/link] إلى
فقرة المرساة [p]
[سابق]منسق مسبقًا[/pre]
[مسافة بادئة] نص متداخل[/indent]
هذه
مجرد علامات قليلة.بالطبع
، أنت حرفي
إضافة المزيد من العلامات وفقًا لاحتياجاتك
يمكن استخدامها في
لوحة الرسائل التي يقترح مستخدمو إعلانات النظام
في البرامج التالية
نظام بي بي اس