بيئة التشغيل: لغة البرنامج النصي
IIS
: قاعدة بيانات VBScript: لغة قاعدة بيانات
Access/SQL Server
: SQL
1. ملخص:
سواء في مواقع الويب الديناميكية مثل المنتديات أو أنظمة الأخبار أو أنظمة التنزيل، غالبًا ما ترى وظائف البحث: البحث عن المشاركات، والبحث عن المستخدمين، والبحث عن البرامج (باختصار، البحث عن الكلمات الرئيسية)، وما إلى ذلك. تقدم هذه المقالة كيفية إنشاء موقع ويب ديناميكي بحث عملي فعال ومتعدد القيم في الموقع يستند إلى ASP.
تتناول هذه المقالة "بحث المطابقة الغامضة متعدد الشروط". بعد فهم الشروط المتعددة، يصبح البحث بشرط واحد مجرد قطعة من الكعكة. بشكل عام، هناك طريقتان للبحث متعدد الشروط: طريقة التعداد والطريقة التقدمية. عندما لا يكون هناك عدد كبير جدًا من شروط البحث ( n <= 3)، يمكن استخدام طريقة التعداد، ويكون تكرار العبارات 2 أس n ، ويزداد n بشكل كبير. من الواضح أنه عندما يزيد عدد الشروط، يجب اعتماد الطريقة التقدمية بغض النظر عن كفاءة البرنامج أو قابليته للتحقق. تردد العبارة هو n وينمو خطيًا. تجدر الإشارة إلى أن فكرة طريقة التعداد بسيطة للغاية، فهي تحدد ما إذا كانت الشروط فارغة واحدة تلو الأخرى، ثم تبحث وفقًا للشروط غير الفارغة، وفي الوقت نفسه يمكن لتقنية جدول الحقيقة ذلك يمكن استخدامها للتعامل مع المواقف ذات الشروط الكثيرة للغاية (أعتقد أنه لن يقوم أحد بهذا النوع من الأشياء)، عندما يكون هناك 4 شروط، عليك كتابة 16 مجموعة من العبارات)؛ الطريقة التقدمية أكثر براعة، مع التركيز على الفهم. الأول هو استخدام الأعلام (العلم)، والثاني هو الاستخدام الذكي لاتصالات السلسلة في رمز SQL&. فيما يلي أمثلة لشرح إنشاء المحرك.
2. مثال:
نقوم ببناء محرك استعلام دفتر العناوين. اسم قاعدة البيانات هو Addressbook.mdb، واسم الجدول هو العنوان، والحقول هي كما يلي:
اسم الهوية | رقم | الهاتف | المدرسة |
1 | Zhang San | 33333333 | قسم علوم الكمبيوتر، جامعة العلوم الإلكترونية والتكنولوجيا الصينية |
2 | Li Si | 44444444 | قسم الأحياء، جامعة Sichuan |
3 | Wang Er | 22222222 | قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ |
… | … | … | … |
واجهة البحث على شبكة الإنترنت هي كما يلي:
الاسم: | الهاتف: | المدرسة: | زر البحث |
البرنامج المصدر الذي يستخدم أسلوب التعداد هو كما يلي:
<%@ CODEPAGE = "936" %>
'الاتصال بقاعدة البيانات
<%
dim conn
dim DBOath
dim rs
dim sql
Set conn=Server.CreateObject("ADODB.Connection")
DBPath = Server .MapPath ("addressbook.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set rs=Server.CreateObject("ADODB.Recordset")
'احصل على الاسم والهاتف رقم من صفحة الويب، قيمة المدرسة
خافت الاسم
خافت Tel
dim اسم المدرسة
=request("Name")
Tel=request("Tel")
School=request("School")
'جوهر البحث في طريقة التعداد، لأن هناك ثلاثة شروط، لذا يجب كتابة 8 مجموعات من عبارات الحكم
If إذا تقليم (الاسم) = "" وتقليم (Tel) = "" وتريم (مدرسة) = "" ثم
sql = "اختر * من ترتيب العناوين حسب المعرف تصاعدي"
ينتهي إذا
كان تقليم (الاسم) = "" وتقليم (Tel) = "" وتقليم (المدرسة) <>"" ثم
sql = "اختر * من العنوان حيث المدرسة مثل '%"&تريم (المدرسة)&
ينتهي
ترتيب "%" حسب المعرف تصاعديًا
إذا كان القطع (الاسم) = "" والقص (Tel) <>"" والقص (المدرسة) = "" ثم
sql = "اختر * من العنوان حيث الهاتف مثل '%"&trim (Tel)&"%' ترتيب حسب المعرف تصاعدي"
ينتهي إذا
كان تقليم (الاسم) = "" وتقليم (Tel) <>"" وتقليم (مدرسة) <>"" ثم
sql = "اختر * من العنوان حيث الهاتف مثل '%"&trim(Tel)&"%' والمدرسة مثل '%"&trim(School)&"%' ترتيب حسب المعرف تصاعدي"
ينتهي إذا
كان Trim(Name)<>"" وtrim(Tel)="" وتقليم (المدرسة) = "" ثم
sql = " حدد * من العنوان حيث الاسم مثل '%"&trim(Name)&"%' ترتيب حسب المعرف تصاعديًا"
ينتهي إذا
كان Trim(Name)<>"" وtrim(Tel )="" وtrim(School)<>" " ثم
sql="select * من العنوان حيث يكون الاسم مثل '%"&trim(Name)&"%' والمدرسة مثل ترتيب '%"&trim(School)&"%' بواسطة المعرف تصاعدي"
ينتهي إذا
كان تقليم (الاسم) < >"" وتقليم (الهاتف) <>"" وتقليم (المدرسة) = "" ثم
sql = "اختر * من العنوان حيث الاسم مثل '%"&تريم (الاسم) &"%' وTel مثل '%"&trim( Tel)&"%' ترتيب حسب المعرف تصاعديًا"
ينتهي إذا
كان Trim(Name)<>"" وtrim(Tel)<>"" وtrim(School)<> "" ثم
sql = "اختر * من العنوان حيث الاسم مثل '%"&trim(Name)&"%' والهاتف مثل '%"&trim(Tel)&"%' والمدرسة مثل '%"&trim(School)&" %' ترتيب حسب المعرف تصاعديًا"
ينتهي إذا
rs.open sql,conn,1,1
'عرض نتائج البحث
إذا كان rs.eof وrs.bof ثم
الاستجابة. اكتب "لا يوجد سجل في دفتر العناوين الحالي"
وإلا
قم بذلك بينما لا rs.eof
Response.write "Name:"&rs("Name" )&"الهاتف:"&rs("Tel")&"المدرسة:"&rs("School")&"<br>"
نهاية
الحلقة
rs.movenext
if 'افصل
مجموعة قاعدة البيانات rs=لا شيء
conn.إغلاق
مجموعة conn=لا شيء
%>
عند فهم البرنامج أعلاه، ركز على الجزء الأساسي. تتوافق مجموعات البيانات الثمانية مع الحالات الثمانية الموجودة في مربعات البحث الثلاثة واحدة تلو الأخرى.
الاسم | هاتف | المدرسة |
| |
فارغة | | | فارغة | فارغة | فارغة |
غير | |
غير | |
غير | |
| فارغة |
بالإضافة إلى ذلك، Trim() هي وظيفة VB تزيل المسافات قبل وبعد سلسلة الإدخال؛ % هو حرف بدل متعدد الأحرف في لغة SQL (_ هو حرف بدل مكون من حرف واحد)، لذلك يمكن ملاحظة أن %" &trim()&"% مفيد جدًا لمربع البحث. تتم مطابقة الكلمات الرئيسية المدخلة من اليسار إلى اليمين على التوالي؛ في لغة SQL، ويتم استخدام الاتصال للإشارة إلى وجود علاقة "AND" بين الشروط غير الفارغة.
دعونا نلقي نظرة على الطريقة التقدمية، بالمقارنة مع طريقة التعداد، فهي تختلف فقط في الجزء الأساسي:
"جوهر البحث في الطريقة التقدمية هو الحكم على ما إذا كان الشرط فارغًا أم لا، وإذا لم يكن فارغًا، فأضفه". إلى شرط البحث
sql="select * from Address Where"
if Name<>"" ثم
sql=sql&" الاسم مثل '%"&Name&"%' "
flag=1
end if
if Tel<>"" و flag=1 ثم
sql=sql&" وTel مثل '%"&Tel&"% '"
flag=1
elseif Tel<>"" ثم
sql=sql&" Tel like '%"&Tel&"%'"
flag=1
النهاية إذا
كانت الشركة<>"" وflag=1 ثم
sql=sql&" والشركة مثل ' %"&Company&"%'"
flag=1
elseif Company <>"" ثم
sql=sql&" الشركة مثل '%"&Company&"%'"
flag=1
النهاية إذا
if علامة = 0 ثم
sql = "اختر * من ترتيب العناوين حسب المعرف تصاعديًا"
النهاية إذا
rs.open sql,conn,1,1
طريقة التقدم هي خوارزمية ذكية، كما يمكن رؤيته من طول البيانات وحدها. تكمن صعوبة وجوهر هذه الخوارزمية في العلم و&. أولاً، يجب أن تعلم أن & هو رمز سلسلة في SQL، والذي يربط الأحرف حول الرمز معًا. العودة إلى البرنامج مرة أخرى، عندما لا يكون الاسم فارغًا، sql="select * from Address Where Name like '%"&Name&"%' "and flag=1 next، عندما لا يكون الاسم فارغًا والهاتف ليس فارغًا، أي Tel<>"" وflag=1, sql="select * from Address حيث الاسم مثل '%"&Name&"%' وTel مثل '%"&Tel&"%' "بينما flag=1، وإلا عندما يكون الاسم فارغًا Tel Not فارغ، sql="select * from Address حيث يمكن توسيع نطاق البحث باستخدام n الشروط. بالطبع، عندما تكون جميع الشروط فارغة، أي أن العلامة = 0 ستحدد جميع العناصر في جميع الجداول.
3. يؤكد:
في هذه المرحلة، يتم إنشاء محرك البحث. فيما يلي بعض أمثلة الاستخدام:
الاسم: تشانغ | الهاتف: | المدرسة: | زر البحث |
نتائج البحث هي:
الاسم: تشانغ سان هاتف: 33333333 الوحدة: قسم علوم الكمبيوتر، جامعة العلوم والتكنولوجيا الإلكترونية في الصين
الاسم: | الهاتف: | المدرسة: | زر البحث | عن الكلية
نتائج البحث هي:
الاسم: Zhang San هاتف: 33333333 الوحدة: قسم علوم الكمبيوتر، جامعة العلوم الإلكترونية والتكنولوجيا الصينية
الاسم Li Si هاتف: 44444444 الوحدة: قسم الأحياء، جامعة سيتشوان
الاسم: Wang Er هاتف: 22222222 الوحدة: قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ
الاسم: | الهاتف: 4444 | المدرسة: سيتشوان | زر البحث |
نتائج البحث هي:
الاسم لي سي الهاتف: 44444444 الوحدة: قسم الأحياء، جامعة سيتشوان
الاسم: | الهاتف: | المدرسة: Pay% | زر بحث | كبير
نتائج البحث هي:
الاسم: Wang Er الهاتف: 22222222 الوحدة: قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ
4. يحسن:
في الواقع، لا يزال هذا المحرك يعاني من بعض العيوب. تكمن المشكلة بشكل أساسي في حرف البدل %. من ناحية، يرجع ذلك إلى أن الأشخاص معتادون على استخدام * كحرف بدل، ومن ناحية أخرى، إذا ظهر % في ارتباط تشعبي، فسيتم "تناول" % عند الحصول عليه من خلال الطلب، كما يلي:
--test.htm--
…
<a href=test.asp?content=test%the%sign>انقر هنا</a>
…
--test.asp--
<%
المحتوى = الطلب ("المحتوى")
الرد.كتابة المحتوى
%>
عند تصفح test.htm في IE، انقر فوق الارتباط التشعبي وسيتم عرضه على النحو التالي:
com.testthesign
يمكن ملاحظة أن % يتم تجاهله مباشرة بواسطة الارتباط التشعبي. كيف يمكننا حل هذه المشكلة؟ الأمر بسيط جدًا، نقوم بخدعة صغيرة - قم بتخريب العارضة وتغيير العمود.
أضف الكود التالي قبل قلب البحث:
الاسم = استبدال (الاسم، "*"، "٪")
هاتف=استبدال(هاتف،"*"،"،٪")
الشركة=استبدال(الشركة،"*"،%")
أضف الكود التالي بعد قلب البحث:
الاسم=استبدال(الاسم،"%"،*")
هاتف=استبدال(هاتف،"%"،*")
الشركة=استبدال(الشركة،"%"،*")
دعونا نحلل هذه التصريحات. استبدال () هي وظيفة استبدال سلسلة في VB. استبدال (الاسم، "*"، "٪") هو استبدال كل * في الاسم بـ %. بمعنى آخر، نستبدل جميع تواجدات * في الشروط الثلاثة بـ %، بحيث يتم تغيير أحرف البدل في الجمل الثلاث الأولى إلى *. الجمل الثلاث التالية يمكن أن تمنع % من "الأكل". سيتم حل جميع المشاكل.
الاسم: | الهاتف: | المدرسة: Pay% | زر بحث | كبير
نتائج البحث هي:
الاسم: وانغ إير الهاتف: 22222222 الوحدة: قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ
قم بتغيير العبارة أعلاه مرة أخرى واستبدل * بالمسافات، ألن يصبح محرك البحث الذي نستخدمه عادة المسافات لفصل شروط البحث في Google وBaidu؟
بيئة التشغيل: لغة البرنامج النصي
IIS
: قاعدة بيانات VBScript: لغة قاعدة بيانات
Access/SQL Server
: SQL
1. ملخص:
سواء في مواقع الويب الديناميكية مثل المنتديات أو أنظمة الأخبار أو أنظمة التنزيل، غالبًا ما ترى وظائف البحث: البحث عن المشاركات، والبحث عن المستخدمين، والبحث عن البرامج (باختصار، البحث عن الكلمات الرئيسية)، وما إلى ذلك. تقدم هذه المقالة كيفية إنشاء موقع ويب ديناميكي بحث عملي فعال ومتعدد القيم في الموقع يستند إلى ASP.
تتناول هذه المقالة "بحث المطابقة الغامضة متعدد الشروط". بعد فهم الشروط المتعددة، يصبح البحث بشرط واحد مجرد قطعة من الكعكة. بشكل عام، هناك طريقتان للبحث متعدد الشروط: طريقة التعداد والطريقة التقدمية. عندما لا يكون هناك عدد كبير جدًا من شروط البحث ( n <= 3)، يمكن استخدام طريقة التعداد، ويكون تكرار العبارات 2 أس n ، ويزداد n بشكل كبير. من الواضح أنه عندما يزيد عدد الشروط، يجب اعتماد الطريقة التقدمية بغض النظر عن كفاءة البرنامج أو قابليته للتحقق. تردد العبارة هو n وينمو خطيًا. تجدر الإشارة إلى أن فكرة طريقة التعداد بسيطة للغاية، فهي تحدد ما إذا كانت الشروط فارغة واحدة تلو الأخرى، ثم تبحث وفقًا للشروط غير الفارغة، وفي الوقت نفسه يمكن لتقنية جدول الحقيقة ذلك يمكن استخدامها للتعامل مع المواقف ذات الشروط الكثيرة للغاية (أعتقد أنه لن يقوم أحد بهذا النوع من الأشياء)، عندما يكون هناك 4 شروط، عليك كتابة 16 مجموعة من العبارات)؛ الطريقة التقدمية أكثر براعة، مع التركيز على الفهم. الأول هو استخدام الأعلام (العلم)، والثاني هو الاستخدام الذكي لاتصالات السلسلة في رمز SQL&. فيما يلي أمثلة لشرح إنشاء المحرك.
2. مثال:
نقوم ببناء محرك استعلام دفتر العناوين. اسم قاعدة البيانات هو Addressbook.mdb، واسم الجدول هو العنوان، والحقول هي كما يلي:
اسم الهوية | رقم | الهاتف | المدرسة |
1 | Zhang San | 33333333 | قسم علوم الكمبيوتر، جامعة العلوم الإلكترونية والتكنولوجيا الصينية |
2 | Li Si | 44444444 | قسم الأحياء، جامعة Sichuan |
3 | Wang Er | 22222222 | قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ |
… | … | … | … |
واجهة البحث على شبكة الإنترنت هي كما يلي:
الاسم: | الهاتف: | المدرسة: | زر البحث |
البرنامج المصدر الذي يستخدم أسلوب التعداد هو كما يلي:
<%@ CODEPAGE = "936" %>
'الاتصال بقاعدة البيانات
<%
dim conn
dim DBOath
dim rs
dim sql
Set conn=Server.CreateObject("ADODB.Connection")
DBPath = Server .MapPath ("addressbook.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
Set rs=Server.CreateObject("ADODB.Recordset")
'احصل على الاسم والهاتف رقم من صفحة الويب، قيمة المدرسة
خافت الاسم
خافت Tel
dim اسم المدرسة
=request("Name")
Tel=request("Tel")
School=request("School")
'جوهر البحث في طريقة التعداد، لأن هناك ثلاثة شروط، لذا يجب كتابة 8 مجموعات من عبارات الحكم
If إذا تقليم (الاسم) = "" وتقليم (Tel) = "" وتريم (مدرسة) = "" ثم
sql = "اختر * من ترتيب العناوين حسب المعرف تصاعدي"
ينتهي إذا
كان تقليم (الاسم) = "" وتقليم (Tel) = "" وتقليم (المدرسة) <>"" ثم
sql = "اختر * من العنوان حيث المدرسة مثل '%"&تريم (المدرسة)&
ينتهي
ترتيب "%" حسب المعرف تصاعديًا
إذا كان القطع (الاسم) = "" والقص (Tel) <>"" والقص (المدرسة) = "" ثم
sql = "اختر * من العنوان حيث الهاتف مثل '%"&trim (Tel)&"%' ترتيب حسب المعرف تصاعدي"
ينتهي إذا
كان تقليم (الاسم) = "" وتقليم (Tel) <>"" وتقليم (مدرسة) <>"" ثم
sql = "اختر * من العنوان حيث الهاتف مثل '%"&trim(Tel)&"%' والمدرسة مثل '%"&trim(School)&"%' ترتيب حسب المعرف تصاعدي"
ينتهي إذا
كان Trim(Name)<>"" وtrim(Tel)="" وتقليم (المدرسة) = "" ثم
sql = " حدد * من العنوان حيث الاسم مثل '%"&trim(Name)&"%' ترتيب حسب المعرف تصاعديًا"
ينتهي إذا
كان Trim(Name)<>"" وtrim(Tel )="" وtrim(School)<>" " ثم
sql="select * من العنوان حيث يكون الاسم مثل '%"&trim(Name)&"%' والمدرسة مثل ترتيب '%"&trim(School)&"%' بواسطة المعرف تصاعدي"
ينتهي إذا
كان تقليم (الاسم) < >"" وتقليم (الهاتف) <>"" وتقليم (المدرسة) = "" ثم
sql = "اختر * من العنوان حيث الاسم مثل '%"&تريم (الاسم) &"%' وTel مثل '%"&trim( Tel)&"%' ترتيب حسب المعرف تصاعديًا"
ينتهي إذا
كان Trim(Name)<>"" وtrim(Tel)<>"" وtrim(School)<> "" ثم
sql = "اختر * من العنوان حيث الاسم مثل '%"&trim(Name)&"%' والهاتف مثل '%"&trim(Tel)&"%' والمدرسة مثل '%"&trim(School)&" %' ترتيب حسب المعرف تصاعديًا"
ينتهي إذا
rs.open sql,conn,1,1
'عرض نتائج البحث
إذا كان rs.eof وrs.bof ثم
الاستجابة. اكتب "لا يوجد سجل في دفتر العناوين الحالي"
وإلا
قم بذلك بينما لا rs.eof
Response.write "Name:"&rs("Name" )&"الهاتف:"&rs("Tel")&"المدرسة:"&rs("School")&"<br>"
نهاية
الحلقة
rs.movenext
if 'افصل
مجموعة قاعدة البيانات rs=لا شيء
conn.إغلاق
مجموعة conn=لا شيء
%>
عند فهم البرنامج أعلاه، ركز على الجزء الأساسي. تتوافق مجموعات البيانات الثمانية مع الحالات الثمانية الموجودة في مربعات البحث الثلاثة واحدة تلو الأخرى.
الاسم | هاتف | المدرسة |
| |
فارغة | | | فارغة | فارغة | فارغة |
غير | |
غير | |
غير | |
| فارغة |
بالإضافة إلى ذلك، Trim() هي وظيفة VB تزيل المسافات قبل وبعد سلسلة الإدخال؛ % هو حرف بدل متعدد الأحرف في لغة SQL (_ هو حرف بدل مكون من حرف واحد)، لذلك يمكن ملاحظة أن %" &trim()&"% مفيد جدًا لمربع البحث. تتم مطابقة الكلمات الرئيسية المدخلة من اليسار إلى اليمين على التوالي؛ في لغة SQL، ويتم استخدام الاتصال للإشارة إلى وجود علاقة "AND" بين الشروط غير الفارغة.
دعونا نلقي نظرة على الطريقة التقدمية، بالمقارنة مع طريقة التعداد، فهي تختلف فقط في الجزء الأساسي:
"جوهر البحث في الطريقة التقدمية هو الحكم على ما إذا كان الشرط فارغًا أم لا، وإذا لم يكن فارغًا، فأضفه." إلى شرط البحث
sql="select * from Address Where"
if Name<>"" ثم
sql=sql&" الاسم مثل '%"&Name&"%' "
flag=1
end if
if Tel<>"" و flag=1 ثم
sql=sql&" وTel مثل '%"&Tel&"% '"
flag=1
elseif Tel<>"" ثم
sql=sql&" Tel like '%"&Tel&"%'"
flag=1
النهاية إذا
كانت الشركة<>"" وflag=1 ثم
sql=sql&" والشركة مثل ' %"&Company&"%'"
flag=1
elseif Company <>"" ثم
sql=sql&" الشركة مثل '%"&Company&"%'"
flag=1
النهاية إذا
if علامة = 0 ثم
sql = "اختر * من ترتيب العناوين حسب المعرف تصاعديًا"
النهاية إذا
rs.open sql,conn,1,1
طريقة التقدم هي خوارزمية ذكية، كما يمكن رؤيته من طول البيانات وحدها. تكمن صعوبة وجوهر هذه الخوارزمية في العلم و&. أولاً، يجب أن تعلم أن & هو رمز سلسلة في SQL، والذي يربط الأحرف حول الرمز معًا. العودة إلى البرنامج مرة أخرى، عندما لا يكون الاسم فارغًا، sql="select * from Address Where Name like '%"&Name&"%' "and flag=1 next، عندما لا يكون الاسم فارغًا والهاتف ليس فارغًا، أي Tel<>"" وflag=1, sql="select * from Address حيث الاسم مثل '%"&Name&"%' وTel مثل '%"&Tel&"%' "بينما flag=1، وإلا عندما يكون الاسم فارغًا Tel Not فارغ، sql="select * from Address حيث يمكن توسيع نطاق البحث باستخدام n الشروط. بالطبع، عندما تكون جميع الشروط فارغة، أي أن العلامة = 0 ستحدد جميع العناصر في جميع الجداول.
3. يؤكد:
في هذه المرحلة، يتم إنشاء محرك البحث. فيما يلي بعض أمثلة الاستخدام:
الاسم: تشانغ | الهاتف: | المدرسة: | زر البحث |
نتائج البحث هي:
الاسم: تشانغ سان هاتف: 33333333 الوحدة: قسم علوم الكمبيوتر، جامعة العلوم والتكنولوجيا الإلكترونية في الصين
الاسم: | الهاتف: | المدرسة: | زر البحث | عن الكلية
نتائج البحث هي:
الاسم: Zhang San هاتف: 33333333 الوحدة: قسم علوم الكمبيوتر، جامعة العلوم الإلكترونية والتكنولوجيا الصينية
الاسم Li Si هاتف: 44444444 الوحدة: قسم الأحياء، جامعة سيتشوان
الاسم: Wang Er هاتف: 22222222 الوحدة: قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ
الاسم: | الهاتف: 4444 | المدرسة: سيتشوان | زر البحث |
نتائج البحث هي:
الاسم لي سي الهاتف: 44444444 الوحدة: قسم الأحياء، جامعة سيتشوان
الاسم: | الهاتف: | المدرسة: Pay% | زر بحث | كبير
نتائج البحث هي:
الاسم: Wang Er الهاتف: 22222222 الوحدة: قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ
4. يحسن:
في الواقع، لا يزال هذا المحرك يعاني من بعض العيوب. تكمن المشكلة بشكل أساسي في حرف البدل %. من ناحية، يرجع ذلك إلى أن الأشخاص معتادون على استخدام * كحرف بدل، ومن ناحية أخرى، إذا ظهر % في ارتباط تشعبي، فسيتم "تناول" % عند الحصول عليه من خلال الطلب، كما يلي:
--test.htm--
…
<a href=test.asp?content=test%the%sign>انقر هنا</a>
…
--test.asp--
<%
المحتوى = الطلب ("المحتوى")
الرد.كتابة المحتوى
%>
عند تصفح test.htm في IE، انقر فوق الارتباط التشعبي وسيتم عرضه على النحو التالي:
com.testthesign
يمكن ملاحظة أن % يتم تجاهله مباشرة بواسطة الارتباط التشعبي. كيف يمكننا حل هذه المشكلة؟ الأمر بسيط جدًا، نقوم بخدعة صغيرة - قم بتخريب العارضة وتغيير العمود.
أضف الكود التالي قبل قلب البحث:
الاسم = استبدال (الاسم، "*"، "٪")
هاتف=استبدال(هاتف،"*"،%")
الشركة=استبدال(الشركة،"*"،%")
أضف الكود التالي بعد قلب البحث:
الاسم=استبدال(الاسم،"%"،*")
هاتف=استبدال(هاتف،"%"،*")
الشركة=استبدال(الشركة،"%"،*")
دعونا نحلل هذه التصريحات. استبدال () هي وظيفة استبدال سلسلة في VB. استبدال (الاسم، "*"، "٪") هو استبدال كل * في الاسم بـ %. بمعنى آخر، نستبدل جميع تواجدات * في الشروط الثلاثة بـ %، بحيث يتم تغيير أحرف البدل في الجمل الثلاث الأولى إلى *. الجمل الثلاث التالية يمكن أن تمنع % من "الأكل". سيتم حل جميع المشاكل.
الاسم: | الهاتف: | المدرسة: Pay% | زر بحث | كبير
نتائج البحث هي:
الاسم: وانغ إير الهاتف: 22222222 الوحدة: قسم الهندسة المعمارية، جامعة جنوب غرب جياوتونغ
قم بتغيير العبارة أعلاه مرة أخرى واستبدل * بالمسافات، ألن يصبح محرك البحث الذي نستخدمه عادة المسافات لفصل شروط البحث في Google وBaidu؟