using System;
using System.Text;
using System.Text.RegularExpressions;
namespace bjmti
{
/// <summary>
/// include 的摘要說明。
/// </summary>
public class include
{
public include()
{
//
// TODO: 在此處添加建構函式邏輯
//
}
#region 字串截取函數
/// <summary>
/// 字串截取函數
/// </summary>
/// <param name="inputString">要截取的字串</param>
/// <param name="len">要截取的長度</param>
/// <returns>string</returns>
///
public static string CutString(string inputString,int len)
{
ASCIIEncoding ascii = new ASCIIEncoding();
int tempLen=0;
string tempString="";
byte[] s = ascii.GetBytes(inputString);
for(int i=0;i<s.Length;i++)
{
if((int)s[i]==63)
{
tempLen+=2;
}
else
{
tempLen+=1;
}
try
{
tempString+=inputString.Substring(i,1);
}
catch
{
break;
}
if(tempLen>len)
break;
}
// //如果截過則加上半個省略符號
// byte[] mybyte=System.Text.Encoding.Default.GetBytes(inputString);
// if(mybyte.Length>len)
// tempString+="…";
return tempString;
}
#endregion
#region 產生由日期組成的唯一的檔案名稱
/// <summary>
/// 產生由日期組成的唯一的檔案名稱
/// </summary>
/// <returns>string</returns>
///
public static string makeFileName()
{
string newFileName;
string dateName = System.DateTime.Now.ToString("yyyyMMddhhmmss");
System.Random srd = new Random();
int srdName = srd.Next(1000);
newFileName = dateName+srdName.ToString();
return newFileName;
}
#endregion
#region 過濾特殊字元
/// <summary>
/// 過濾特殊字元
/// </summary>
/// <param name="inputStr">字串</param>
/// <returns>string</returns>
public static string cutBadStr(string inputStr)
{
inputStr = inputStr.ToLower().Replace(",","");
inputStr = inputStr.ToLower().Replace("<","<");
inputStr = inputStr.ToLower().Replace(">",">");
inputStr = inputStr.ToLower().Replace("%","");
inputStr = inputStr.ToLower().Replace(".","");
inputStr = inputStr.ToLower().Replace(":","");
inputStr = inputStr.ToLower().Replace("#","");
inputStr = inputStr.ToLower().Replace("&","");
inputStr = inputStr.ToLower().Replace("$","");
inputStr = inputStr.ToLower().Replace("^","");
inputStr = inputStr.ToLower().Replace("*","");
inputStr = inputStr.ToLower().Replace("`","");
inputStr = inputStr.ToLower().Replace(" ","");
inputStr = inputStr.ToLower().Replace("~","");
inputStr = inputStr.ToLower().Replace("or","");
inputStr = inputStr.ToLower().Replace("and","");
return inputStr;
}
#endregion
#region 過濾html標記
/// <summary>
/// 過濾html標記
/// </summary>
/// <param name="HTMLStr">要過濾的字串</param>
/// <returns>string</returns>
///
public static string CutHTML(string strHtml)
{
string [] aryReg ={
@"<script[^>]*?>.*?</script>",
@"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(http://www.cnblogs.com/lds85930/admin/file://[%22%22'tbnr]%7c[%5e/7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
@"([\r\n])[\s]+",
@"&(quot|#34);",
@"&(amp|#38);",
@"&(lt|#60);",
@"&(gt|#62);",
@"&(nbsp|#160);",
@"&(iexcl|#161);",
@"&(cent|#162);",
@"&(pound|#163);",
@"&(copy|#169);",
@"&#(\d+);",
@"-->",
@"<!--.*\n"
};
string [] aryRep = {
"",
"",
"",
"\"",
"&",
"<",
">",
" ",
"\xa1",//chr(161),
"\xa2",//chr(162),
"\xa3",//chr(163),
"\xa9",//chr(169),
"",
"\r\n",
""
};
string newReg =aryReg[0];
string strOutput=strHtml;
for(int i = 0;i<aryReg.Length;i++)
{
Regex regex = new Regex(aryReg[i],RegexOptions.IgnoreCase);
strOutput = regex.Replace(strOutput,aryRep[i]);
}
strOutput.Replace("<","");
strOutput.Replace(">","");
strOutput.Replace("\r\n","");
return strOutput;
}
#endregion
#region 標題固定長度
/// <summary>
/// <table style="font-size:12px">
/// <tr><td><b>功能描述</b>:填充或截斷原始字串為指定長度 </td></tr>
/// <tr><td><b>創 建 人</b>: </td></tr>
/// <tr><td><b>建立時間</b>:</td></tr>
/// </table>
/// </summary>
/// <param name="strOriginal">原始字串</param>
/// <param name="maxTrueLength">字串的位元組長度</param>
/// <param name="chrPad">填充字元</param>
/// <param name="blnCutTail">字串的位元組長度超過maxTrueLength時截斷多餘字元</param>
/// <returns>填充或截斷後的字串</returns>
static public string PadRightTrueLen(string strOriginal,int maxTrueLength,char chrPad,bool blnCutTail)
{
string strNew = strOriginal;
if (strOriginal==null || maxTrueLength<=0)
{
strNew = "";
return strNew;
}
int trueLen = TrueLength(strOriginal);
if (trueLen>maxTrueLength)//超過maxTrueLength
{
if (blnCutTail)//截斷
{
for(int i=strOriginal.Length-1; i>0; i--)
{
strNew = strNew.Substring(0,i);
if (TrueLength(strNew) == maxTrueLength)
break;
else if (TrueLength(strNew) < maxTrueLength)
{
strNew += chrPad.ToString();
break;
}
}
}
}
else//填充
{
for(int i=0;i<maxTrueLength-trueLen;i++)
{
strNew += chrPad.ToString();
}
}
return strNew;
}
//主方法
public static string CutStringTitle(string inputString,int i)
{
return PadRightTrueLen(inputString,i,' ',true);
}
/// <summary>
/// <table style="font-size:12px">
/// <tr><td><b>功能描述</b>:字串的位元組長度 </td></tr>
/// <tr><td><b>創 建 人</b>: </td></tr>
/// <tr><td><b>建立時間</b>:</td></tr>
/// </table>
/// </summary>
/// <param name="str">字串</param>
/// <returns>字串的位元組長度</returns>
static public int TrueLength(string str)
{
int lenTotal = 0;
int n = str.Length;
string strWord = "";
int asc;
for(int i=0;i<n;i++)
{
strWord = str.Substring(i,1);
asc = Convert.ToChar(strWord);
if ( asc < 0 || asc > 127 )
lenTotal = lenTotal + 2;
else
lenTotal = lenTotal + 1;
}
return lenTotal;
}
#endregion
#region 關閉當前視窗(靜態)
/// <summary>
/// (Descript) 關閉當前視窗(靜態)
/// (Author) warfu
/// (Date) 2007-08-28
/// </summary>
public static void CloseWindow()
{
System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE=JAVASCRIPT>window.close()</SCRIPT>");
}
#endregion
#region 開啟沒有Toolbar的新視窗(靜態)
/// <summary>
/// 返回js指令碼——window.open('','')
/// </summary>
/// <param name="url">網址</param>
/// <param name="name">目標</param>
/// <returns></returns>
public static string openWeb(string url,string name)
{
//輸出提示資訊
return "<script language=javascript>window.open('"+ url +"','"+ name +"')</script>";
}
/// <summary>
/// 開啟沒有Toolbar的新視窗(靜態)
/// </summary>
/// <param name="str_Url">頁面路徑</param>
/// <param name="int_Height">視窗高度</param>
/// <param name="int_Width">視窗寬度</param>
/// <param name="str_WebName">視窗名稱</param>
public static void OpenWindow(string str_Url,int int_Height,int int_Width,string str_WebName)
{
//構造JAVASCRIPT
string str_JavaScript = @"<Script language='JavaScript'>
window.open('"mailto:+str_Url+@%22','%22+str_WebName+@%22','height="+ int_Height mailto:+@%22','width="+ int_Width mailto:+@%22','top=0,left=0,location=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,titlebar=yes,toolbar=no,directories=no');
</Script>";
System.Web.HttpContext.Current.Response.Write(str_JavaScript);
}
#endregion
}
}
我們知道,在C#(.Net)內部所使用Unicode來儲存字串,這樣在處理字串的時候偶爾會發生一些不爽的事情。比如,如果字串中有中文字元,而我們想取得固定長度字串就頗為麻煩,下面提供了一個解決方案。在這個方案中,我們實現了這麼幾個功能:
取得給出字串靠左邊的子串,子串的大小為為指定長度;
如果給出的字串長度大於給出的長度,則在子串的末端加上“..”。
避免出現半個漢字的情況。
源碼如下:
private string getLeftSubString(string content, int length)
{
Encoding encoding = Encoding.GetEncoding("gb2312");
StringBuilder sb = new StringBuilder();
int totalLength = 0;
foreach (char contentChar in content)
{
int size = encoding.GetByteCount(new char[] { contentChar });
if (totalLength + size > length -2)
{
sb.Append("..");
break;
}
sb.Append(contentChar);
totalLength += size;
}
return sb.ToString();
}