میخوام توی textbox فقط حروف فارسی تایپ بشه !

من توی سایتم یه جستجوی کوچولو از sql server دارم که برای جلوگیری از خطرات sql injection میخوام بجز حروف فارسی چیز دیگه ای درون textbox قرار نگیره !
یعنی موقع فشاردادن کلید جستجو ، محتویات درون textbox چک بشه و اگر فقط حروف فارسی ( یا انگلیسی ) تایپ شده بود عمل جستجو انجام بشه !
چه راه کاری و یا چه کدی میتونه این کارو انجانم بده ؟
 

shirini_forush

Well-Known Member
یه آموزش تو مقالات سایت هست که با JavaScript یه فارسی نویسی مستقل از سیستم برای باکستون فراهم میکنه.
شما میتونی از اون استفاده کنی و دکمه ای که برای سویچ بین انگلیسی و فارسی هست رو قرار ندی. که زبان همیشه فارسی باشه.
 
یه آموزش تو مقالات سایت هست که با JavaScript یه فارسی نویسی مستقل از سیستم برای باکستون فراهم میکنه.
شما میتونی از اون استفاده کنی و دکمه ای که برای سویچ بین انگلیسی و فارسی هست رو قرار ندی. که زبان همیشه فارسی باشه.

مرسی .
ولی من نمیخوام از جاوااسکریپت استفاده کنم . چون امنیت مورد نظر رو فراهم نمیکنه !
فقط با برنامه نویسی باید باشه !
فکر کنم راه ساده تری از جاوااسکریپت هم باشه . که توی ASP.net موجود باشه !
 

MDP

Well-Known Member
من پیشنهاد میکنم از خاصیت onkeydown استفاده کنید .

توی ث این خاصیت کد اسکی حرف چاپ شده رو چک کنید و اگه فارسی بود اجازه چاپ بدید!
 

mehranzand

Member
یعنی چی نمی خوام از جاوا اسکرپت استفاده کنم امنیت نداره؟!
برای هر کار کوچکی که نباید تریپ به طرف سرور داشته باشیم!!
همین راهی که vb bmw پیشنهاد کردند درست ترین و عملی ترین راهه
 

amirlol

Well-Known Member
میشه کد های اسکی شو بعد از ارسال چک کنه و اگه بین حروف فارسی بود True بده و....
 
میشه کد های اسکی شو بعد از ارسال چک کنه و اگه بین حروف فارسی بود True بده و....

خب ای کد http://www.codeproject.com/useritems/Alphabets_Checking.asp

دقیقا همونه دیگه !
یعنی کدهای اسکی متن وارد شده رو چک میکنه !
فقط میمونه تعریف یک بازه دقیق برای شناختن حروف فارسی !
و دقیقا مشکل من همین جاست !
کد اسکی برای حروف فارسی تقریبا بین 1570 تا 1610 هست ، که این محدوده توسط کد فوق ردمیشه و ارور میده !
شاید هم این محدوده به دسیمال باشه که اگه بتونم کد اصلیشو پیدا کنم فکر کنم دیگه تمومه !
باز هم منتظر راهنمایی شما عزیزان هستم .
مرسی از همگی .
 

mehranzand

Member
فکر کنم واضح باشه!
کد:
var farsi = true ;
var s = new Array(32,33,34,35,36,37,1548,1711,41,40,215,43,
                  1608,45,46,47,48,49,50,51,52,53,54,55,56,
                  57,58,1603,44,61,46,1567,64,1616,1584,125,
                  1609,1615,1609,1604,1570,247,1600,1548,47,
                  8217,1583,215,1563,1614,1569,1613,1601,
                  8216,123,1611,1618,1573,126,1580,1688,
                  1670,94,95,1662,1588,1584,1586,1610,1579,
                  1576,1604,1575,1607,1578,1606,1605,1574,
                  1583,1582,1581,1590,1602,1587,1601,1593,
                  1585,1589,1591,1594,1592,60,124,62,1617);
var b = navigator.userAgent.toLowerCase() ;
var msie  = (b.indexOf('msie')>-1)  ? true : false ;
var gecko = (b.indexOf('gecko')>-1) ? true : false ;
var opera = (b.indexOf('opera')>-1) ? true : false ;
//=============================================
function convert(fld,e) {
	k =(msie) ? event.keyCode : e.which ;
	if (farsi) {
//		if (msie) event.keyCode = s[k-32] ;
		if (msie && k>32 && k<128) event.keyCode = s[k-32] ;
		else if (gecko && k>32 && k<128) {
			var EVT = document.createEvent("KeyEvents") ;
				EVT.initKeyEvent("keypress", true, true, document.defaultView, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, 0, String.fromCharCode(s[k-32]).charCodeAt(0)) ;
			e.preventDefault() ;
			e.target.dispatchEvent(EVT) ;
		}
		else if (opera && k>31 && k<128) {
			fld.value  = fld.value + String.fromCharCode(s[k-32]) ;
			return false ;
		}
	}
}

//==================================================  =================
function LangFar (myobj)
{
       myobj.style.textAlign = "right";
       myobj.style.direction = "rtl";
       myobj.focus();
}


function LangEng (myobj)
{
       myobj.style.textAlign = "left";
       myobj.style.direction = "ltr";
       myobj.focus();

}

//==================================================  =================
function change(obj){
	farsi = !farsi ;
if (farsi) {
LangFar(obj);
}
else{
LangEng(obj);
}
	obj.focus() ;
}


//==================================================  =================
 
آخرین ویرایش:
mehranzand عزیز ممنون . . .
فکر کنم این کد visual Basic نباشه ! درسته ؟
ولی کار من فقط با کد visual Basic راه میافته !
من این کد رو جای دیگه هم دیدم ! ولی نتونستم ازش استفاده کنم .
 

shirini_forush

Well-Known Member
امیر جان چه حرفی میزنیا!
اگر میخوای طرف کلاینت باشه که دیگه vb نمیشه.
اگرم طرف سرور باشه که با یه regexp حل میشه.
البته تو کلاینت هم میشه با regexp کارکرد.
 
آقا من کلا قاطی کردم .
یعنی اصلا اطلاعی در مورد اینکه کد سمت سرور چیه و کد سمت کاربر چیه ، ندارم !
من فقط میخوام از SQL Injection جلوگیری کنم ! همین !
فکر کردم این که به کاربر اجازه بدیم فقط حروف وارد کنه ، راه خوبی باشه برای اینکار . . .
ولی متاسفانه دیگه نمیدونم چی به چیه !
لطفا یک جواب کلی و قاطع در این مورد بفرمائید که هر دو کد سمت کاربر و سمت سرور رو داشته باشه !
ممنون از دوستان خوبم .
 

mazoolagh

Active Member
اینکه شما بخواین بصرف جلوگیری از sql injection محدودیت برای کاربر ایجاد کنین از هر نظر از بیخ و بن اشتباه هست. بعدش هم اگر شما همینطور که میگین هنوز اطلاعاتتون در این زمینه محدود هست در حدی که تفاوت کد سمت کاربر و سرور رو نمیدونین 2 راه بیشتر ندارین:

1- راهنماییهای دیگران رو قبول کنین و تو کارشون اما و اگر نیارین
2- بدین کسی براتون این کار رو انجام بده
 

shirini_forush

Well-Known Member
قبلا امیر خان (amirlol) یه نمونه ی خوب که ظاهرا همه هم تاییدش کردن برای جلوگیری از sql injection گذاشته بودن.
البته برای asp.
اگر هم asp.net کار میکنید که سه سوته... کافیه پارامتر تعریف کنی.
 
Ok . سعی میکنم از کد آقای amirlol استفاده کنم ، البته اگه بتونم در ASP.NET راهش بیاندازم !
حالا دلیل این کار من فقط این بود که توی سایت من ، کاربر اصلا نیازی به وارو کردن کاراکترهای دیگه بجز حروف فارسی نداره !
فکر کردم راه خوبی باشه و نیز مطمئن تر از راه دیگه برای جلوگیری از SQL Injection !
حالا اگه بقیه دوستان اینکار رو قبول ندارن ، ما هم استفاده نمیکنیم !
با تشکر از همگی >:)
 

جدیدترین ارسال ها

بالا