شرح صفوف ومحتوى الفقرة
عند عرض نتائج البحث الفوري في المتصفح، أنشئ عناصر القائمة عبر document.createElement() وأسند العناوين عبر خاصية textContent الآمنة.
- لا تقم أبداً ببناء عناصر القائمة المنسدلة بدمج النصوص مباشرة داخل
resultsBox.innerHTML += "...". - استخدم
document.createElement("a")، واضبط الرابطa.href = item.url، والعنوانa.textContent = item.title. - اعرض رسالة واضحة للمستخدم عند عدم وجود نتائج متطابقة (عندما يكون
data.results.length === 0).
يضمن تنظيف المعرف النصي على الخادم أن يكون item.url مساراً نسبياً آمناً دائماً، بينما تتكفل textContent في المتصفح بعرض العنوان بأمان.
PHP
<?php
// Server-side validation of generated result URLs before JSON output
function buildSafeSearchResult(int $id, string $title, string $slug): array {
$cleanSlug = preg_replace('/[^a-z0-9-]/', '', strtolower($slug));
return [
'id' => $id,
'title' => $title,
'url' => '/tutorials/php/' . $cleanSlug,
];
}
$item = buildSafeSearchResult(91, 'Live Search <PDO>', 'php-ajax-live-search');
echo json_encode($item) . "\n";