<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践Ok]Smarty截取中文乱码问题解决办法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Tue, 31 Jul 2012 01:51:22 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：因smarty原自带函数截取时会出现中文乱码（我的是GBK的编码），出现怪异符号。<br/>目的：修改Smarty的变量调节器truncate无乱码截取中文。<br/><br/>正题：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网站的页面在展现时，为了美观，经常需要对一些标题的长度进行控制。在整个程序中，到处都是那忙碌的字符串截取函数，而且还可能出现中文乱码。用mb_substr（）可以比较好的截取中文，但是它把中文和英文都按一个字符处理，截取的效果感觉不是太好。<br/><br/>如果你是用Smarty做表现层的话，可以用smarty的变量调节器truncate方法来控制字符串的长度，当然利用Smarty自己的truncate截取中文时，会出现乱码。我们可以改写它的truncate调节器，让它来帮我们截取字符串，达到一劳永逸的效果。<br/><br/>找到你的Smarty安装目录，打开plugins/modifier.truncate.php文件。你可以用下面的函数替换掉smarty自己的函数。<br/><br/><textarea name="code" class="php" rows="15" cols="100">
function smarty_modifier_truncate($string, $length = 80, $etc = &#039;...&#039;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$break_words = false, $middle = false)
&#123;
&nbsp;&nbsp;if ($length == 0)
&nbsp;&nbsp;return &#039;&#039;;

&nbsp;&nbsp;if (strlen($string) &gt; $length) &#123;
&nbsp;&nbsp;$length -= min($length, strlen($etc));
&nbsp;&nbsp;for($i = 0; $i &lt; $length ; $i++) &#123;
&nbsp;&nbsp;&nbsp;&nbsp;$strcut .= ord($string[$i]) &gt; 127 ? $string[$i].$string[++$i] : $string[$i];
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;return $strcut.$etc;&nbsp;&nbsp;

&nbsp;&nbsp;&#125; else &#123;
&nbsp;&nbsp;&nbsp;&nbsp;return $string;
&nbsp;&nbsp;&#125;
&#125;

</textarea><br/><br/><br/>参数$length:为截取字符串的最大长度，默认为80字符，一个中文按2个字符计算;$etc:截取字符串时，自动附加在后面的符号。默认为 （...）；$break_words 本指为是否可以打断一个单词，在中文环境下，作用不大，在改写的方法中，后面两个参数不起什么作用。<br/><br/>最后说下使用，&#123;$title&#124;truncate:30:&quot;...&quot;&#125; ，很简单不是？当然这30个字符的长度还包括（...），如果你不喜欢，可以自己修改上面代码中的一行。
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践Ok]Smarty截取中文乱码问题解决办法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>