请教如何将一个变量(包含汉字和数字符号)分割成几段存放在几个变量里? 为什么要这样做?用text类型存放不就行了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $content1=substr($content,0,4000);$content2=substr($content,4000,8000);将$content1,$content2分别放在两个varchar2字段里,但是select出来在合起来显示也会中间有乱码的 http://blog.csdn.net/xuzuning高效的中文字符串截取函数 用法和substr函数一样分割串到数组,中文每字算1<?phpfunction m_chunk_split($str,$size=64) { preg_match_all("/[\x80-\xff]?./",$str,$ar); $a = array_chunk($ar[0],$size); $b = array_fill(0,count($a),''); return array_map('join',$b,$a);}print_r(m_chunk_split('dsfj中文654哈哈859fr',10));?> 那你就用我的那个c_substr函数一段一段的取 function c_substr($str,$start=0) { $ch = chr(127); $p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/"); $r = array("",""); if(func_num_args() > 2) $end = func_get_arg(2); else $end = strlen($str); if($start < 0) $start += $end; if($start > 0) { $s = substr($str,0,$start); if($s[strlen($s)-1] > $ch) { $s = preg_replace($p,$r,$s); $start += strlen($s); } } $s = substr($str,$start,$end); $end = strlen($s); if($s[$end-1] > $ch) { $s = preg_replace($p,$r,$s); $end += strlen($s); } return substr($str,$start,$end);}function m_substr($str,$start) { preg_match_all("/[\x80-\xff]?./",$str,$ar); if(func_num_args() >= 3) { $end = func_get_arg(2); return join("",array_slice($ar[0],$start,$end)); }else return join("",array_slice($ar[0],$start));}print_r(m_chunk_split('dsfj中文654哈哈859fr',0));print_r(m_chunk_split('dsfj中文654哈哈859fr',10));好像只能够从指定位置一直取到最后,不能够取中间一部分的吗,如3到6位的 function split_chr($title,$len) { $length = $len; if (strlen($title)>$length) { $temp = 0; for($i=0; $i<$length; $i++) if (ord($title[$i])>128) $temp++; if ($temp%2 == 0) $title=substr($title,0,$length); else $title=substr($title,0,$length+1); } return $title; } 这个函数希望对你有帮助~~ oracle可以用clob,blob之类啊,比mysql的text还大呢 print_r(m_chunk_split('dsfj中文654哈哈859fr',10));好像只能够从指定位置一直取到最后,不能够取中间一部分的吗,如3到6位的m_chunk_split是按指定的长度分割字符串,如例就是把'dsfj中文654哈哈859fr'按10个字一组切开到数组至于c_substr和m_substr已经说了用法与substr一样的。那么为什么不用第三个参数呢?3到6位print m_substr('dsfj中文654哈哈859fr',3,6);print c_substr('dsfj中文654哈哈859fr',3,6);最后6个字符print c_substr('dsfj中文654哈哈859fr',-6); 数据库连接问题? 【注册疑问】为什么首位必须为字母? 用MYSQL做运算和用PHP做运算,哪个优 ecshop二次开发 调用类里面方法的问题 紧急求救PHP中提交多个空格的问题! 兄弟刚毕业,做的一个网站,网站上有点问题,看那位高手可以解决!!!!! 能帮我看看吗,谢谢! 请问有没有办法,我不知道上一个页面输入框的名字,和不知道有好多个输入框的情况下,我想显示你一个页面所有输入框中的内容。请问有没有 打开IE浏览器进行测试http://127.0.0.1/aa.php,为什么不行 关于<select的操作? 分级收藏
$content2=substr($content,4000,8000);
将$content1,$content2分别放在两个varchar2字段里,但是select出来在合起来显示也会中间有乱码的
高效的中文字符串截取函数
<?php
function m_chunk_split($str,$size=64) {
preg_match_all("/[\x80-\xff]?./",$str,$ar);
$a = array_chunk($ar[0],$size);
$b = array_fill(0,count($a),'');
return array_map('join',$b,$a);
}
print_r(m_chunk_split('dsfj中文654哈哈859fr',10));
?>
$ch = chr(127);
$p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/");
$r = array("","");
if(func_num_args() > 2)
$end = func_get_arg(2);
else
$end = strlen($str);
if($start < 0)
$start += $end; if($start > 0) {
$s = substr($str,0,$start);
if($s[strlen($s)-1] > $ch) {
$s = preg_replace($p,$r,$s);
$start += strlen($s);
}
}
$s = substr($str,$start,$end);
$end = strlen($s);
if($s[$end-1] > $ch) {
$s = preg_replace($p,$r,$s);
$end += strlen($s);
}
return substr($str,$start,$end);
}function m_substr($str,$start) {
preg_match_all("/[\x80-\xff]?./",$str,$ar);
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return join("",array_slice($ar[0],$start,$end));
}else
return join("",array_slice($ar[0],$start));
}
print_r(m_chunk_split('dsfj中文654哈哈859fr',0));
print_r(m_chunk_split('dsfj中文654哈哈859fr',10));
好像只能够从指定位置一直取到最后,不能够取中间一部分的吗,如3到6位的
{
$length = $len;
if (strlen($title)>$length) {
$temp = 0;
for($i=0; $i<$length; $i++)
if (ord($title[$i])>128) $temp++;
if ($temp%2 == 0)
$title=substr($title,0,$length);
else
$title=substr($title,0,$length+1);
}
return $title;
} 这个函数希望对你有帮助~~
好像只能够从指定位置一直取到最后,不能够取中间一部分的吗,如3到6位的m_chunk_split是按指定的长度分割字符串,如例就是把'dsfj中文654哈哈859fr'按10个字一组切开到数组至于c_substr和m_substr
已经说了用法与substr一样的。那么为什么不用第三个参数呢?
3到6位
print m_substr('dsfj中文654哈哈859fr',3,6);
print c_substr('dsfj中文654哈哈859fr',3,6);
最后6个字符
print c_substr('dsfj中文654哈哈859fr',-6);