mehrdadneedhelp
Member
از اونجا كه مشكل فارسي نوشتن يه مشكل اساسيه من تصميم گرفتم اين مجموعه سىوالها رو رو كه ميشه گفت همش مال برنامه نويس دات ارگ رو اينجا بزارم تا خيال همه راحت بشه
سئوال 1
من يک سايت بصورت آزمايشي طراحي کرده ام وآنرا در يک host آزاد خارجي قرار داده ام . مشکل اينجاست که وقتي وارد سايت ميشوم فونت فارسي نمايش داده نميشود در حاليکه نسخه روي کامپيوتر خودم بدرستي کار ميکند . آيا نيازي به نصب فونت فارسي در کامپيوتر host هست يا مشکل چيز ديگريست.
با utf-8 و فونت tahoma نباید مشکلی داشته باشِد.
در مورد asp بايد خود فايل نيز فرمتش utf-8 باشد. بااستفاده از notepad مي تونيد اون رو save as با encoding مخصوص كنيد.
--------------------------
سئوال 2
در هنگام ذخيره سازي متن در اس كيو ال سرور :
نقل قول:
بصورت ؟؟؟؟؟ ذخيره ميشن
دليل : بايد از يك N قبل از عبارت insert و يا آپديت استفاده كنيد. نوع فيلدها هم بايد با n شروع شود مانند ntext و غيره. n به معناي national است.
--------------------------
سئوال 3
چه جوري مي توانم کاري کنم که وقتي page من اجرا شد به صورت پيش فرز صفحه نمايش از راست به چپ نمايش دهد.
Dir صفحه را در صفحه Properties بر روي rtl قرار دهيد
--------------------------
سئوال4
توی صفحاتی که با asp.net طراحی کردم ، هر موقع که با Back بين صفحاتی که قبلا رفتم بر می گردم ، متنهای فارسی رو با کاراکترهای نا مفهووم نمايش ميده . اما وقتی با لينکها شوون ميرم ، متنهای فارسی رو هم درست نشوون ميده
براي فارسي نشان دادن در محيط ASP.NET با توجه به اينكه در VS.NET ساپورت كامل يونيكد وجود دارد بايد مراحل زير حتما انجام شود:
- 1در صفحه ي خواص هر فرم بايد charset را به unicode ست كنيد
- 2هر صفحه ي aspx را بايد از منوي فايل با استفاده از گزينه ي save as دوباره به صورت يونيكد with sig. ثبت كنيد. اگر در اين حالت دقت كنيد دكمه ي save as يك علامت مثلث رويش است. روي آن كليك كنيد تا يك منوي كوچك باز شود. حالا در اين منو save with encoding وجود دارد.
- 3تمام code behinde ها يعني سورس صفحات مانند cs.* را بايد دوباره save as كرده و مطابق روش 2 آنرا save with encoding كنيد. حالا گزينه ي utf-8 را كه انتخاب كنيد مشكل اين يكي هم حل مي شود.
اين سه مرحله بايد روي *هر* صفحه انجام شود.
در: ASP
در صفحات HTML و در صفحات ASP اين مورد فراموش نشود
--------------------------
سئوال5
شما اگر از دكمه هاي back و forward استفاده كنيد در IE دوباره صفحه ي شما به هم مي ريزد. فكر مي كنيد چرا؟
دليل :
در وب كانفيگ روي هاست شما 1252 را دقيقا به utf-8 و نه چيز ديگري تبديل كنيد اين مشكل هم حل مي شود
--------------------------
سئوال6
مشكل اينست كه بنده با فرمت utf-8 اطلاعات را به بانك اكسس ميريزم ، اما وقتي ميخواهم آن را در ويندوز مشاهده كنم نوشتهها به هم ريخته است ولي اگر از windows-1256 استفاده كنم نه!
من در sqlserver به شکل زير حل کردم در اکسس هم شايد بشه :
-1 فيلدها رو از نوع nvarchar تعريف کن
2- قبل از مقدار فيلدها حرف N رو بذار
كد meta tage .... utf-8 رو قبل از انجام save قرار بده - حله
براي كار شما مناسب نيست. همان utf-8 خوب است
- به نظر مي رسد از SQL server داري استفاده مي كني؟ اگر اينطور است بايد در تعريف جدوال SQL سرور اين مورد را COLLATE Arabic_CI_AS NOT NULL بجاي لاتيني كه الان هست اضافه كني و بهتر است بگويم بايد اون را به اين صورت Patch كني !!
اگر دقت كني الان در اسكريپتي كه مربوط به جداول SQL سرور است تعاريف به صورت زير است
COLLATE SQL_Latin1_General_CP1256_CI_AS NOT NULL
اين مورد براي انگليسي نويسي خوب است ولي نه براي فارسي عربي نويسي
- آيا فايلهاي معمولي را با فرمت UTF-8دوباره Save as كردي يا يادت رفته ؟
اين موضوع خيلي مهم است. تا اينكار را نكني همه چيز ANSI در صفحات ثبت مي شود و نه يونيكد. با استفاده از نوت پد ويندوزهاي 2000 به بالا مي توني اين Save as را انجام بدي
اسكريپت فارسي نويسي
-------------------------------
تاريخ شمشي در ASP
-------------------------------
تاريخ شمسي در محيط دات نت
نام فصاي نام اين كلاس همانطور كه مشاهده مي فرماييد Zarin است. زرين اينجا نام پروژه است. ( پس بهتر است آنرا مطابق نام كلي پروژه ويرايش كنيد )
براي استفاده كافي است يك متغير از كلاس ايجاد كنيد و سپس متد را به صورت زير فراخواني كنيد :
در مثال فوق من يك ليبل روي فرم گذاشته ام . و سپس با استفاده از متغير تعريف شده از كلاس به تابع مورد نظر دسترسي پيدا كرده ام.
در ضمن كلاس فوق امتحان خودش را پس داده است.
---------------------------------
يك اسكريپت كامل و بدون نقص براي فارسي نويسي مستقل از سيستم عامل در وب :
سئوال 1
من يک سايت بصورت آزمايشي طراحي کرده ام وآنرا در يک host آزاد خارجي قرار داده ام . مشکل اينجاست که وقتي وارد سايت ميشوم فونت فارسي نمايش داده نميشود در حاليکه نسخه روي کامپيوتر خودم بدرستي کار ميکند . آيا نيازي به نصب فونت فارسي در کامپيوتر host هست يا مشکل چيز ديگريست.
با utf-8 و فونت tahoma نباید مشکلی داشته باشِد.
در مورد asp بايد خود فايل نيز فرمتش utf-8 باشد. بااستفاده از notepad مي تونيد اون رو save as با encoding مخصوص كنيد.
--------------------------
سئوال 2
در هنگام ذخيره سازي متن در اس كيو ال سرور :
نقل قول:
بصورت ؟؟؟؟؟ ذخيره ميشن
دليل : بايد از يك N قبل از عبارت insert و يا آپديت استفاده كنيد. نوع فيلدها هم بايد با n شروع شود مانند ntext و غيره. n به معناي national است.
کد:
insert into tbltest(f1,f2) values(N'')فارسي',N'خوب است
سئوال 3
چه جوري مي توانم کاري کنم که وقتي page من اجرا شد به صورت پيش فرز صفحه نمايش از راست به چپ نمايش دهد.
Dir صفحه را در صفحه Properties بر روي rtl قرار دهيد
--------------------------
سئوال4
توی صفحاتی که با asp.net طراحی کردم ، هر موقع که با Back بين صفحاتی که قبلا رفتم بر می گردم ، متنهای فارسی رو با کاراکترهای نا مفهووم نمايش ميده . اما وقتی با لينکها شوون ميرم ، متنهای فارسی رو هم درست نشوون ميده
براي فارسي نشان دادن در محيط ASP.NET با توجه به اينكه در VS.NET ساپورت كامل يونيكد وجود دارد بايد مراحل زير حتما انجام شود:
- 1در صفحه ي خواص هر فرم بايد charset را به unicode ست كنيد
- 2هر صفحه ي aspx را بايد از منوي فايل با استفاده از گزينه ي save as دوباره به صورت يونيكد with sig. ثبت كنيد. اگر در اين حالت دقت كنيد دكمه ي save as يك علامت مثلث رويش است. روي آن كليك كنيد تا يك منوي كوچك باز شود. حالا در اين منو save with encoding وجود دارد.
- 3تمام code behinde ها يعني سورس صفحات مانند cs.* را بايد دوباره save as كرده و مطابق روش 2 آنرا save with encoding كنيد. حالا گزينه ي utf-8 را كه انتخاب كنيد مشكل اين يكي هم حل مي شود.
اين سه مرحله بايد روي *هر* صفحه انجام شود.
در: ASP
کد:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
SUB Session_OnStart
session.codepage=65001 'UTF-8 Code Page
END SUB
</SCRIPT>
در صفحات HTML و در صفحات ASP اين مورد فراموش نشود
کد:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
--------------------------
سئوال5
شما اگر از دكمه هاي back و forward استفاده كنيد در IE دوباره صفحه ي شما به هم مي ريزد. فكر مي كنيد چرا؟
دليل :
کد:
<globalization requestEncoding="windows-1252" responseEncoding="windows-1252" fileEncoding="windows-1252" culture="en-US" uiCulture="en-US" />
--------------------------
سئوال6
مشكل اينست كه بنده با فرمت utf-8 اطلاعات را به بانك اكسس ميريزم ، اما وقتي ميخواهم آن را در ويندوز مشاهده كنم نوشتهها به هم ريخته است ولي اگر از windows-1256 استفاده كنم نه!
من در sqlserver به شکل زير حل کردم در اکسس هم شايد بشه :
-1 فيلدها رو از نوع nvarchar تعريف کن
2- قبل از مقدار فيلدها حرف N رو بذار
كد meta tage .... utf-8 رو قبل از انجام save قرار بده - حله
کد:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
براي كار شما مناسب نيست. همان utf-8 خوب است
- به نظر مي رسد از SQL server داري استفاده مي كني؟ اگر اينطور است بايد در تعريف جدوال SQL سرور اين مورد را COLLATE Arabic_CI_AS NOT NULL بجاي لاتيني كه الان هست اضافه كني و بهتر است بگويم بايد اون را به اين صورت Patch كني !!
اگر دقت كني الان در اسكريپتي كه مربوط به جداول SQL سرور است تعاريف به صورت زير است
COLLATE SQL_Latin1_General_CP1256_CI_AS NOT NULL
اين مورد براي انگليسي نويسي خوب است ولي نه براي فارسي عربي نويسي
- آيا فايلهاي معمولي را با فرمت UTF-8دوباره Save as كردي يا يادت رفته ؟
اين موضوع خيلي مهم است. تا اينكار را نكني همه چيز ANSI در صفحات ثبت مي شود و نه يونيكد. با استفاده از نوت پد ويندوزهاي 2000 به بالا مي توني اين Save as را انجام بدي
اسكريپت فارسي نويسي
کد:
script>
function submitenter(myfield,e)
{
var key;
if (window.event)
key = window.event.keyCode;
else if (e)
key = e.which;
if (key>31)
if (key<128)
{
if (window.event)
window.event.keyCode=' !"#$%،گ)(×+و-./0123456789:ک,=.؟@ِذ}ىُىلآ÷ـ،/’د×؛َءٍف‘{ًْإ~جژچ^_پشذزيثبلاهتنمئدخحضقسفعرصطغظ<|>ّ'.charCodeAt(key-32);
else if (e)
e.which=' !"#$%،گ)(×+و-./0123456789:ك,=.؟@ِذ}ىُىلآ÷ـ،/’د×؛َءٍف‘{ًْإ~جژچ^_پشذزيثبلاهتنمئدخحضقسفعرصطغظ<|>ّ'.charCodeAt(key-32);
}
return true;
}
</script>
<input type="text" onkeypress="return submitenter(this,event)" name="Name" >
-------------------------------
تاريخ شمشي در ASP
کد:
<%@Language=VBScript%>
<META http-equiv=CONTENT-TYPE content="text/html; charset=utf-8">
<%
D = Array (20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21)
P = Array (11, 12, 10, 12, 11, 11, 10, 10, 10, 9, 10, 10)
W = Array ("يکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه")
Mon = Array ("فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند")
Dm = Day(Date)
Mm = Month(Date)
Ym = Year(Date)
U = 0
Rp = 0
If (Ym Mod 4) = 0 Then U = 1
If ((Ym Mod 100) = 0 AND (Ym Mod 400) <> 0) Then U = 0
Ys = Ym - 622
X = Ys - 22
X = X Mod 33
If ((X Mod 4) = 0 AND X <> 32) Then Rp = 1
I = Not(Rp-2) + NOT(U - 2) * 2
X = 0
If (I = 0 AND Mm = 3) Then X = 1
If I = 0 Then I = 3
Ms = (9 + Mm) Mod 13
If Ms < 10 Then Ms = Ms + 1
D1 = D(Mm - 1)
If (I = 1 AND Mm > 2) Then D1 = D1 - 1
If (I = 2 AND Mm < 3) then D1 = D1 - 1
P1 = P(Mm - 1)
If (I = 1 AND Mm > 2) Then P1 = P1 + 1
If (I = 2 AND Mm < 4) Then P1 = P1 + 1
If (Dm > 0 AND Dm <= D1) Then
Ds = P1 + Dm + X - 1
X = 1
Else
Ds = Dm - D1
Ms = Ms + 1
If Ms = 13 Then Ms = 1
X = 2
End If
If ((Mm = 3 AND X = 2) OR Mm > 3) Then Ys = Ys + 1
DateShamsi = W(WeekDay(Date) - 1) & "&" & Ds & "&" & Mon(Ms - 1) & "&" & Ys
%>
<%= DateShamsi %>/
-------------------------------
تاريخ شمسي در محيط دات نت
کد:
using System;
namespace Zarin
{
/// <summary>
/// clsPesianDate.
/// Converted to VC# by : [email][email protected][/email] <mailto:[email protected]>
/// </summary>
public class clsPersianDate
{
public clsPersianDate()
{
//
// TODO: Add constructor logic here (chi! bih!)
//
}
/// <summary>
/// GetShamsiDate.
/// Its name is so clear!
/// </summary>
public string GetSystemShamsiDate()
{
int Year = System.DateTime.Now.Year;
int Month = System.DateTime.Now.Month;
int Day = System.DateTime.Now.Day ;
return GetShamsiDate(Year, Month, Day);
}
/// <summary>
/// GetShamsiDate.
/// Converts the specified date to shamsi.
/// </summary>
public string GetShamsiDate(int Year,int Month,int Day)
{
int[] A ={0,10, 11, 9, 11, 10, 10, 9, 9, 9, 8, 9, 9};
int[] B ={0,30, 30, 29, 31, 31, 31, 31, 31, 31, 30, 30, 30};
int YY;
int MM;
int DD;
string CHm,CHd ;
// Get current Date values
YY = Year - 621;
if ((Year % 4 == 0) && (Month == 3) && (Day < 21))
{
A[3]++;
B[3]++;
}
MM = Month + 9;
DD = Day + A[Month];
if (DD > B[Month])
{
DD -= B[Month];
MM++;
}
if (MM > 12)
MM -= 12;
if (MM == 10 && DD > 10)
YY--;
if (MM == 11 || MM == 12)
YY--;
if (MM<10)
CHm = "0" + MM.ToString() ;
else
CHm = MM.ToString() ;
if (DD<10)
CHd = "0" + DD.ToString() ;
else
CHd = DD.ToString() ;
return YY.ToString() + '/' + CHm + '/' + CHd;
}
public string systemDayOfWeek()
{
string res="";
switch( System.DateTime.Now.DayOfWeek.ToString() )
{
case "Saturday" :
res = "شنبه";
break;
case "Sunday" :
res = "یک شنبه" ;
break;
case "Monday":
res = "دوشنبه";
break;
case "Tuesday":
res = "سه شنبه";
break;
case "Wednesday":
res = "چهار شنبه";
break;
case "Thursday":
res = "پنج شنبه";
break;
case "Friday":
res = "جمعه" ;
break;
}
return res ;
}
public string systemShamsiDatTime()
{
return
GetSystemShamsiDate() + " اکنون " +"\n"+
System.DateTime.Now.ToLongTimeString() +"\n"+
System.DateTime.Now.ToLongDateString() + " " +"\n"+
System.DateTime.Now.DayOfWeek + " "+
systemDayOfWeek() ;
}
}
}
نام فصاي نام اين كلاس همانطور كه مشاهده مي فرماييد Zarin است. زرين اينجا نام پروژه است. ( پس بهتر است آنرا مطابق نام كلي پروژه ويرايش كنيد )
براي استفاده كافي است يك متغير از كلاس ايجاد كنيد و سپس متد را به صورت زير فراخواني كنيد :
کد:
clsPersianDate m_d = new clsPersianDate(); lblDate.Text = m_d.GetSystemShamsiDate();
در مثال فوق من يك ليبل روي فرم گذاشته ام . و سپس با استفاده از متغير تعريف شده از كلاس به تابع مورد نظر دسترسي پيدا كرده ام.
در ضمن كلاس فوق امتحان خودش را پس داده است.
---------------------------------
يك اسكريپت كامل و بدون نقص براي فارسي نويسي مستقل از سيستم عامل در وب :
کد:
<!
var lang = 1; // 1: Farsi, 0: English
var keys = new Array(1711,0,0,0,0,1608,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,
1603,1572,0,1548,1567,0,1616,
1571,8250,0,1615,0,0,1570,
1577,0,0,0,1569,1573,0,0,1614,1612,1613,0,0,8249,1611,
171,0,187,1580,1688,1670,0,1600,
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);
function FKeyDown (){
var key = window.event.keyCode;
if (key == 145){
if (lang == 0)
{
lang = 1;
return true;
}
else
{
lang = 0;
return true;
}
}
}
function keyConv(){
if (lang == 1)
{
if((event.keyCode > 38) && (event.keyCode < 123)){
event.keyCode = (keys[event.keyCode - 39])? (keys[event.keyCode - 39]): event.keyCode;
}
}
}
function strvalidate_fa(str){
var i, chr;
for(i = 0 ; i < str.length ; i++){
chr = str.charCodeAt(i);
if(!((chr == 32) || (chr >= 1569 && chr <= 1594) || (chr >= 1601 && chr <= 1610) || (chr == 1662) || (chr == 1670) || (chr == 1688) || (chr == 1711))) return false;
}
return true;
}
//<TEXTAREA class=forms onkeypress="keyConv()" onkeydown="FKeyDown()" dir=rtl name=S1 rows=15 cols=84> </TEXTAREA>
//-->