自己写的js substr支持中文截取(中文是双字符)

Sb_substr代码  

  1. //得到字符总数  
  2. function getChars(str) {  
  3.     var i = 0;  
  4.     var c = 0.0;  
  5.     var unicode = 0;  
  6.     var len = 0;  
  7.   
  8.     if (str == null || str == "") {  
  9.         return 0;  
  10.     }  
  11.     len = str.length;  
  12.     for(i = 0; i < len; i++) {  
  13.             unicode = str.charCodeAt(i);  
  14.         if (unicode < 127) { //判断是单字符还是双字符  
  15.             c += 1;  
  16.         } else {  //chinese  
  17.             c += 2;  
  18.         }  
  19.     }  
  20.     return c;  
  21. }  
  22.   
  23. function sb_strlen(str) {  
  24.     return getChars(str);  
  25. }  
  26. //截取字符  
  27. function sb_substr(str, startp, endp) {  
  28.     var i=0; c = 0; unicode=0; rstr = '';  
  29.     var len = str.length;  
  30.     var sblen = sb_strlen(str);  
  31.   
  32.     if (startp < 0) {  
  33.         startp = sblen + startp;  
  34.     }  
  35.   
  36.     if (endp < 1) {  
  37.         endp = sblen + endp;// - ((str.charCodeAt(len-1) < 127) ? 1 : 2);  
  38.     }  
  39.     // 寻找起点  
  40.     for(i = 0; i < len; i++) {  
  41.         if (c >= startp) {  
  42.             break;  
  43.         }  
  44.         var unicode = str.charCodeAt(i);  
  45.         if (unicode < 127) {  
  46.             c += 1;  
  47.         } else {  
  48.             c += 2;  
  49.         }  
  50.     }  
  51.   
  52.     // 开始取  
  53.     for(i = i; i < len; i++) {  
  54.         var unicode = str.charCodeAt(i);  
  55.         if (unicode < 127) {  
  56.             c += 1;  
  57.         } else {  
  58.             c += 2;  
  59.         }  
  60.         rstr += str.charAt(i);  
  61.   
  62.         if (c >= endp) {  
  63.             break;  
  64.         }  
  65.     }  
  66.   
  67.     return rstr;  
  68. }  
  69. //调用示例:  
  70. function getShortFileName(filename) {  
  71.     short_filename = filename;  
  72.     if (sb_strlen(short_filename) > 61) {  
  73.         short_filename = sb_substr(short_filename, 0, 36) + ' ... ' + sb_substr(short_filename, -20);  
  74.     }  
  75.     return short_filename;  
  76. }  
  77.   
  78. var chara = 'ni你2好1啊!'  
  79. js_self = chara.substr(4);  
  80. test = sb_substr(chara,4);  
  81. alert("js_self:"+js_self+"ext:"+test);  
  82.   
  83. function mb_strlen(str) {  
  84.     var len = 0;  
  85.     for(var i = 0; i < str.length; i++) {  
  86.         len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;  
  87.     }  
  88.     return len;  
  89. }  
  90.   
  91.  <script language="JavaScript">  

<!--
function CutStrLength(str,Ilength)
{
var tmp=0;
var len=0;
var okLen=0
for(var i=0;i<Ilength;i++)
{
if(str.charCodeAt(i)>255)
tmp+=2
else
len+=1
okLen+=1
if(tmp+len==Ilength)
{
return (str.substring(0,okLen));
break;
}
if(tmp+len>Ilength)
{
return (str.substring(0,okLen-1)+"");
break;
}
}
}
function checkFieldLength(fieldName,fieldDesc,fieldLength)
{
var str=document.getElementById(fieldName).value;
var theLen=0;
var teststr='';
for(i=0;i<str.length;i++)
{
teststr=str.charAt(i);
if(str.charCodeAt(i)>255)
theLen=theLen+2;
else
theLen=theLen+1;
}
document.getElementById('showMsg').innerText=theLen;
if(theLen>fieldLength)
{
document.getElementById('showMsg').innerText=fieldDesc;
//alert(fieldDesc+" 的字段长度超过规定长度!");
//document.getElementById(fieldName).focus();
document.getElementById(fieldName).value=CutStrLength(str,fieldLength);
return false;
}
else
{
return true;
}
}
//-->
</script>

</head>
<body>
<form method="POST" action="">
<textarea id="testArea" name="testArea" rows="3" cols="22" onkeyup="checkFieldLength('testArea', '超过允许输入的字符个数', 20);"
onchange="checkFieldLength('testArea', '超过允许输入的字符个数', 20);"></textarea>
<div id="testInfo">
已经输入:<span id="showMsg"></span></div>
</form>
</body>
</html>

时间: 2024-08-22 14:09:07

自己写的js substr支持中文截取(中文是双字符)的相关文章

php 解决substr()截取中文字符乱码问题_php技巧

在php中如果我要用substr()截取字符串全英文的没问题,如果包括有中文或英文就会悲剧了,但大家也 别切我们可以使用其它办法来解决. php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里做一个补充. 首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后面的加载CSS的link无法被IE6正确解析

php substr()函数截取中文字符串乱码

php截取中文字符串出现乱码,这是最近发现的事情,先前我曾经写过一篇关于自动生成meta信息的文章 ,那篇关于利用php截取文章前多少字作为description方法,但是出现了IE6无法加载CSS的现象,这里 做一个补充.   首先要明确这么一个问题,之所以会出现IE6偶尔无法加载CSS的现象,是因为文件出现了乱码,导致后 面的加载CSS的link无法被IE6正确解析.因此就看到了一个纯HTML页面,没有CSS,赤裸裸! 明确了问题,剩下的问题就好解决了,就是防止乱码,既然万戈所提供的函数出现

自己写的php中文截取函数mb_strlen和mb_substr_php实例

众所周知,php 自带的 strlen 与 substr 函数没法处理中文字符,于是,我们会用 mb_ 系列函数替代.但是,没有 mbstring 库怎么办?这就需要我们自己写一个来替代了,废话不多说,先上代码: 复制代码 代码如下: if ( !function_exists('mb_strlen') ) {  function mb_strlen ($text, $encode) {   if ($encode=='UTF-8') {    return preg_match_all('%(

PHP substr 截取中文乱码的问题解决办法

文章页面的 description 是使用 substr 函数来截取220字符的,但是最后一个汉字总是乱码,而且截取出来的长度也不正确. 通过神奇的 Google 找到方法,可能是因为 substr(string,start,length),会将汉字以字符的形式截断,而造成乱码 解决方案: 使用 PHP 扩展库中的 mb_substr 方法. 注意 1.确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Wind

php中计算中文字符串长度、截取中文字符串的函数代码_php技巧

在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.当然,如果是用的自己的服务器,则只要在php.ini中开启即可.如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了. 以下几个函数用起来颇为顺手的.不过要知道,得在utf-8环境下使用. 复制代码 代码如下: header('Content-type:text/html;cha

php中截取中文字符串的代码小结_php技巧

字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了. 1. 截取GB2312中文字符串 复制代码 代码如下: < ?php //截取中文字符串 function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i

实用技巧:PHP截取中文字符串的问题

技巧|问题|中文|字符串 以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况.但中英文混合.特殊符号等问题总是存在,现在写一个比较全面的,仅供参考: 程序说明: 1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些 2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数 3. 特别适用于用htmlspecialchars()进行过编码的字符串 4.

PHP截取中文字符串的问题

问题|中文|字符串    以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况.但中英文混合.特殊符号等问题总是存在,现在写一个比较全面的,仅供参考:      程序说明:   1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些   2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数   3. 特别适用于用htmlspecialchars()进

旧题新貌:PHP截取中文字符串的问题

以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况.但中英文混合.特殊符号等问题总是存在,现在写一个比较全面的,仅供参考: 程序说明: 1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些 2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数 3. 特别适用于用htmlspecialchars()进行过编码的字符串 4. 能正确处理GB2312中