ECSHOP不懂中文么,这样的低级错误大家都没发现?

2016-07-07 16:22 来源:www.chinab4c.com 作者:ecshop专家



难道大家都没有人注意么,一般人都知道,中文一般是按两个字符计算,英文标点符号和空格都是按一个字符计算。

EC竟然把中文算成一个字符来截取计算,这样就造成了很多地方的字符数量的长短不齐。

下面上图,大家都来看看

未命名.JPG



这里是定义的9个字符的长度, 大家可以数一下,英文刚好是9个,汉字也是9个,但是出来的效果确实长短不齐。

这个,也是用EC做的,也是不齐啊。
未命名1.JPG

这个问题我想应该很好解决吧,修正一下字符截取函数的计算方法。哪位高手出来弄个补丁吧。

未命名.JPG (19.18 KB)

未命名.JPG


回答:
截取是调用的php的iconv_substr和mb_substr函数。这两个函数都会把中英文当做一个字符去处理。

正解啊,学习了!马上试试.

截取是调用的php的iconv_substr和mb_substr函数。这两个函数都会把中英文当做一个字符去处理。
robb 发表于 2009-7-6 16:29


难道就没有办法,修正一下,这样的错误。 给个解决的方法啊。

可参考http://bbs.phplovers.com/read-htm-tid-558.html

我搜到的资料,好像已经解决了啊。 怎么不用这种方法?

//截取字符串,对付中文比substr或mb_substr好用
function cutstr($string, $length) {
$strcut = '';
if(strlen($string) > $length) {
for($i = 0; $i < $length - 3; $i++) {
//如果asc码大于127即非英文字母截取2个字节,并令i++修正偏移,否则直接返回字符
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
return $strcut.' ...';
} else {
return $string;
}
}

这个也可以

这个一直没注意!够细心的!等会回去弄一下 我的也是2。6。2的

EC带的,自定义的函数如下:

/**
* 截取UTF-8编码下字符串的函数
*
* @paramstring$str被截取的字符串
* @paramint$length截取的长度
* @parambool$append是否附加省略号
*
* @returnstring
*/
function sub_str($str, $length = 0, $append = true)
{
$str = trim($str);
$strlength = strlen($str);

if ($length == 0 || $length >= $strlength)
{
return $str;
}
elseif ($length < 0)
{
$length = $strlength + $length;
if ($length < 0)
{
$length = $strlength;
}
}

if (function_exists('mb_substr'))
{
$newstr = mb_substr($str, 0, $length, EC_CHARSET);
}
elseif (function_exists('iconv_substr'))
{
$newstr = iconv_substr($str, 0, $length, EC_CHARSET);
}
else
{
//$newstr = trim_right(substr($str, 0, $length));
$newstr = substr($str, 0, $length);
}

if ($append && $str != $newstr)
{
$newstr .= '...';
}

return $newstr;
}


----------------------------------------

麻烦哪位能给该一下, 俺是白板啊,看不懂代码

不知道这样修改后会不会有什么不良反应,有时间研究一下

怎么回事啊,这里没高人了啊,都两天了,也没有人出来解决一下

希望nethsh兄能说得详细点,像偶这类菜鸟还是不知道怎么修改 ,谢谢!关注中...