现有两个.txt文件A.txt和B.txt, A.txt里放置放置的是3000个常用的简体字;B.txt里放置放置的是与A.txt位置一一对应的3000个繁体字,
即:A.txt ( utf-8 )
皑蔼矮艾碍爱隘鞍氨安...B.txt ( utf-8 )
皚藹矮艾礙愛隘鞍氨安...现在我有一段文字(简体)放在变量$chr内,想通过一个函数把这段文字变成繁体(利用两个txt转换),但是我自己写的算法效率比较低,请各位高手帮忙写个效率高的算法,感激不尽,谢谢!
( 网页 utf-8;php 4 )另:网上搜到的有的不是很好,有的需要开iconv,但是我的服务器不行。
即:A.txt ( utf-8 )
皑蔼矮艾碍爱隘鞍氨安...B.txt ( utf-8 )
皚藹矮艾礙愛隘鞍氨安...现在我有一段文字(简体)放在变量$chr内,想通过一个函数把这段文字变成繁体(利用两个txt转换),但是我自己写的算法效率比较低,请各位高手帮忙写个效率高的算法,感激不尽,谢谢!
( 网页 utf-8;php 4 )另:网上搜到的有的不是很好,有的需要开iconv,但是我的服务器不行。
·详情请访问:http://www.cqfad.com
以 表 : 字段1 简体 字段2 繁体 对应好然后把需要转换的字符串在 sql过程里写 这样是不是应该要快点?
我是这么想的,把两个字体全部放入两个数组中。分别为$jianti,$fanti。
然后将$chr分解为一个数组,使用$arr=explode('',$chr);
再然后获得$arr中每个元素值在$fanti中对应的键值。
$keys=array();
foreach($arr as $key){
$keys[]=array_keys($jianti,$key);
}
再根据获得的键值得到简体字对应的繁体字
foreach($keys as $value){
$arr[]=$fanti($value);
}最后合并数组$arr就得到了繁体字的字符串
$chr=join('',$arr);
记得释放变量,因为这两个数组实在太大了。
unset($arr,$fanti,$jianti);
这样就可以了。前提是简体字和繁体字要一一对应,不能有错位现象。
这两个数组可以保存到一个PHP文件中,
<?php
$jianti=array();
$fanti=array();
?>
使用时直接include这个文件就可以了。
不知道这样效率怎么样,呵呵~~希望有所帮助
1、不能将文件全部读入,太耗费资源
2、文字库,应该是有顺序的,按照汉字的内码排序
3、关键部分就是定位每一个字在库中的位置
4、可以考虑生成一个索引文件,缩小查找范围,先根据需要查找字的内码,确定一个查找范围,然后将在范围内搜索汉字的位置。
举例: 比如 库有 3000个字符,那么我们这样建立索引 每100个为一块 那么 就可以得到30个块:
块号 起始码 结束码
0 xxx xxx
1 xxx xxx 对于一个汉字 先判断他在那个块,然后搜索块,确定位置, 最终就得到汉字的位置,直接在繁体库中seek 然后read就可以了。
耗费资源主要在打开文件上。
实际操作的时候,将$chr作为Key来检索value.
貌似可行,不过实现起来难度不低啊~
况且如果字符数很少,只有3000个字符,呵呵,创建索引文件的效果不会很明显,就像数据库一样,只有几百行记录,根本就不用去索引,而是直接全表扫描,因为全表扫描更快~~
先将需要转换的地方隐藏,转换后显示,用户还以为用了AJAX呢 (*^__^*)
以后简体欲转成繁体,先转成unicode,再根据数组读取相应的繁体字。
或者存数据库更好。
strtr函数应该是最高效的。
a[简体字]=对应的繁体字;
数组c:
c=chr.split('');
for(i=0;i<c.length;i++)
s+=a[c[i]];