·您当前的位置:首页 > 技术教程 > JavaScript >

[JS]js截取字符串的源代码

时间:2014-12-19 14:06Meteoric_cry
[JS]js截取字符串的源代码,这里的问题就是gbk编码占位2个字节,而utf-8占位3个字节,完整的示例代码

假设有字符串“朱元璋”,截取限定的长度为7字节,截取编码为utf-8 结果为“朱”,截取编码为gb2312时 结果为“朱”

字符串为“hello朱元璋”,截取限定的长度为13字节

截取编码为utf-8 结果为“hello朱元”

这里的问题就是gbk编码占位2个字节,而utf-8占位3个字节,完整的示例代码:

  1.  1:   
  2.  
  3.  2: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
  4.  
  5.  3: <html> 
  6.  
  7.  4:  <head> 
  8.  
  9.  5:   <title> new document </title> 
  10.  
  11.  6:   <meta name="generator" content="editplus" /> 
  12.  
  13.  7:   <meta name="author" content="" /> 
  14.  
  15.  8:   <meta name="keywords" content="" /> 
  16.  
  17.  9:   <meta name="description" content="" /> 
  18.  
  19. 10:   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  20.  
  21. 11:  </head> 
  22.  
  23. 12:   
  24.  
  25. 13:  <body> 
  26.  
  27. 14:   <script type="text/javascript"> 
  28.  
  29. 15: function getRealLen(str, isUTF8) { 
  30.  
  31. 16:     if (typeof str != 'string') { 
  32.  
  33. 17:         return 0; 
  34.  
  35. 18:     } 
  36.  
  37. 19:      
  38.  
  39. 20:     if (!isUTF8) { 
  40.  
  41. 21:         return str.replace(/[^\x00-\xFF]/g, 'xx').length; 
  42.  
  43. 22:     } else { 
  44.  
  45. 23:         var tempStr = str.replace(/[\x00-\xFF]/g, ''); 
  46.  
  47. 24:         return (str.length - tempStr.length) + Math.floor(encodeURI(tempStr).length / 3); 
  48.  
  49. 25:     } 
  50.  
  51. 26: } 
  52.  
  53. 27:   
  54.  
  55. 28: function uniLeft(str, isUTF8, len, suffix) { 
  56.  
  57. 29:     var strstr = str.toString(); 
  58.  
  59. 30:     var lenlen = len * 1; 
  60.  
  61. 31:     var suffixsuffix = suffix || ""; 
  62.  
  63. 32:   
  64.  
  65. 33:     if (isNaN(len)) { 
  66.  
  67. 34:         return str; 
  68.  
  69. 35:     } 
  70.  
  71. 36:   
  72.  
  73. 37:     var uniLen = getRealLen(str, isUTF8),tempStr = ''
  74.  
  75. 38:      
  76.  
  77. 39:     if (uniLen <= len) { 
  78.  
  79. 40:         return str.substr(0); 
  80.  
  81. 41:     } 
  82.  
  83. 42:      
  84.  
  85. 43:     for (var i = Math.floor(len / 2); i< uniLen; i++) { 
  86.  
  87. 44:         tempStr = str.substr(0, i); 
  88.  
  89. 45:   
  90.  
  91. 46:         if (getRealLen(tempStr, isUTF8) >= len || getRealLen(str.substr(0, i+1), isUTF8) > len) { 
  92.  
  93. 47:             return tempStr; 
  94.  
  95. 48:         } 
  96.  
  97. 49:     } 
  98.  
  99. 50: } 
  100.  
  101. 51:   
  102.  
  103. 52: var str_1 = '朱元璋'
  104.  
  105. 53: var str_2 = 'hello朱元璋'
  106.  
  107. 54:   
  108.  
  109. 55: document.write( uniLeft(str_1, false, 3) + "<br/>");//gb2312 
  110.  
  111. 56: document.write( uniLeft(str_2, true, 13) );//utf-8 
  112.  
  113. 57: </script> 
  114.  
  115. 58:  </body> 
  116.  
  117. 59: </html> 

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器