U+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
-----------------------------------------------------
8F60 轠 轡 轢 轣 轤 轥 车 轧 轨 轩 轪 轫 转 轭 轮 软
8F70 轰 轱 轲 轳 轴 轵 轶 轷 轸 轹 轺 轻 轼 载 轾 轿
8F80 辀 辁 辂 较 辄 辅 辆 辇 辈 辉 辊 辋 辌 辍 辎 辏
......
如我想获取“车”的“8F66”;反之用“8F66”取加“车”。这是一个字互换,那么一段混合字串(关键点)呢
11 个解决方案
#1
函数strtr
lz是否知道mediawiki的中文繁简转换功能?
用的就是这个函数,比较适合你这种情况,不妨看看它的代码。
如果是标准字符转换,前面的帖子已经作了说明
http://topic.csdn.net/u/20081118/18/c1bac1bd-c4b9-4a94-8244-228ee601b984.html?seed=1531169566
#2
如我想获取“车”的“8F66”;反之用“8F66”取加“车”。这是一个字互换,那么一段混合字串(关键点)呢?
想请教一下你是如何将8F66变成车的?
第二个,如果是混合的,秘须先用正则提取二字节16制码,一个一个生成字符
混取好象是不可能的!
想请教一下你是如何将8F66变成车的?
第二个,如果是混合的,秘须先用正则提取二字节16制码,一个一个生成字符
混取好象是不可能的!
#3
写个算法 你这个是固定的没有组合关系
生成一个php里面的数组,如$array = new Array("8F66"=>'车',...);
最好是生成多个数组,像字典那样可以检索
生成一个php里面的数组,如$array = new Array("8F66"=>'车',...);
最好是生成多个数组,像字典那样可以检索
#4
在网上查到这个取汉字的unicode码 函数,但只能取单个汉字,且没给出反取办法。
function getUnicodeFromOneUTF8($word) {
//获取其字符的内部数组表示,所以本文件应用utf-8编码!
if (is_array( $word))
$arr = $word;
else
$arr = preg_split('//', $word, -1, PREG_SPLIT_NO_EMPTY);
//此时,$arr应类似array(228, 189, 160)
//定义一个空字符串存储
$bin_str = '';
//转成数字再转成二进制字符串,最后联合起来。
foreach ($arr as $value)
$bin_str .= decbin(ord($value));
//此时,$bin_str应类似111001001011110110100000,如果是汉字"你"
//正则截取
$bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3', $bin_str);
//此时, $bin_str应类似0100111101100000,如果是汉字"你"
//return bindec($bin_str); //返回类似20320,汉字"你"
return dechex(bindec($bin_str)); //如想返回十六进制4f60,用这句
}
echo '<br />';
$v='你';
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
function getUnicodeFromOneUTF8($word) {
//获取其字符的内部数组表示,所以本文件应用utf-8编码!
if (is_array( $word))
$arr = $word;
else
$arr = preg_split('//', $word, -1, PREG_SPLIT_NO_EMPTY);
//此时,$arr应类似array(228, 189, 160)
//定义一个空字符串存储
$bin_str = '';
//转成数字再转成二进制字符串,最后联合起来。
foreach ($arr as $value)
$bin_str .= decbin(ord($value));
//此时,$bin_str应类似111001001011110110100000,如果是汉字"你"
//正则截取
$bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3', $bin_str);
//此时, $bin_str应类似0100111101100000,如果是汉字"你"
//return bindec($bin_str); //返回类似20320,汉字"你"
return dechex(bindec($bin_str)); //如想返回十六进制4f60,用这句
}
echo '<br />';
$v='你';
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
#5
iconv
#6
mark学习下
#7
你这是一个典型的Unicode<=>Ascii互换问题。
按照下面的代码,用strtr就可以简单的做到。
但是,需要做两个互换字符的数组。
已经存在县有数据的情况下,写个小程序,自动生成互换数组的代码不成问题。
$data= array(
'\u30c6'=>'全',
'\u30c7'=>'字');
var_dump(strtr('\u30c6中文\u30c7', $data));
注意:
1.不要轻易用正则
2.PHP对单个字符操作的API很少,尽可能用整体转换的函数
#8
测试了一下楼上froole兄的,可以输出,应能满足楼主应用
但直接输出'\u30c6',不行
我记不清了\u30c6哪种编码了,unicode码还是utf-8,还是html的内码?
但直接输出'\u30c6',不行
我记不清了\u30c6哪种编码了,unicode码还是utf-8,还是html的内码?
#9
4楼的在文件是utf-8的情况下通过,但如果不是utf-8的不行
另外,如果知道一个字符的unidcode码,如何输字符:如4f60 输出‘你’
另外,如果知道一个字符的unidcode码,如何输字符:如4f60 输出‘你’
#10
4楼的,如果文件是ISO-8859-1
,下面的这个就不行,不知为什么?
$v=iconv("ISO-8859-1", "UTF-8", "你");
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
,下面的这个就不行,不知为什么?
$v=iconv("ISO-8859-1", "UTF-8", "你");
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
#11
不是不能输出,而是你显示不了。
lz要的功能感觉像java中native2ascii实现的功能,
而不是普通的在HTML中所显示的编码转换问题。
#1
函数strtr
lz是否知道mediawiki的中文繁简转换功能?
用的就是这个函数,比较适合你这种情况,不妨看看它的代码。
如果是标准字符转换,前面的帖子已经作了说明
http://topic.csdn.net/u/20081118/18/c1bac1bd-c4b9-4a94-8244-228ee601b984.html?seed=1531169566
#2
如我想获取“车”的“8F66”;反之用“8F66”取加“车”。这是一个字互换,那么一段混合字串(关键点)呢?
想请教一下你是如何将8F66变成车的?
第二个,如果是混合的,秘须先用正则提取二字节16制码,一个一个生成字符
混取好象是不可能的!
想请教一下你是如何将8F66变成车的?
第二个,如果是混合的,秘须先用正则提取二字节16制码,一个一个生成字符
混取好象是不可能的!
#3
写个算法 你这个是固定的没有组合关系
生成一个php里面的数组,如$array = new Array("8F66"=>'车',...);
最好是生成多个数组,像字典那样可以检索
生成一个php里面的数组,如$array = new Array("8F66"=>'车',...);
最好是生成多个数组,像字典那样可以检索
#4
在网上查到这个取汉字的unicode码 函数,但只能取单个汉字,且没给出反取办法。
function getUnicodeFromOneUTF8($word) {
//获取其字符的内部数组表示,所以本文件应用utf-8编码!
if (is_array( $word))
$arr = $word;
else
$arr = preg_split('//', $word, -1, PREG_SPLIT_NO_EMPTY);
//此时,$arr应类似array(228, 189, 160)
//定义一个空字符串存储
$bin_str = '';
//转成数字再转成二进制字符串,最后联合起来。
foreach ($arr as $value)
$bin_str .= decbin(ord($value));
//此时,$bin_str应类似111001001011110110100000,如果是汉字"你"
//正则截取
$bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3', $bin_str);
//此时, $bin_str应类似0100111101100000,如果是汉字"你"
//return bindec($bin_str); //返回类似20320,汉字"你"
return dechex(bindec($bin_str)); //如想返回十六进制4f60,用这句
}
echo '<br />';
$v='你';
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
function getUnicodeFromOneUTF8($word) {
//获取其字符的内部数组表示,所以本文件应用utf-8编码!
if (is_array( $word))
$arr = $word;
else
$arr = preg_split('//', $word, -1, PREG_SPLIT_NO_EMPTY);
//此时,$arr应类似array(228, 189, 160)
//定义一个空字符串存储
$bin_str = '';
//转成数字再转成二进制字符串,最后联合起来。
foreach ($arr as $value)
$bin_str .= decbin(ord($value));
//此时,$bin_str应类似111001001011110110100000,如果是汉字"你"
//正则截取
$bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3', $bin_str);
//此时, $bin_str应类似0100111101100000,如果是汉字"你"
//return bindec($bin_str); //返回类似20320,汉字"你"
return dechex(bindec($bin_str)); //如想返回十六进制4f60,用这句
}
echo '<br />';
$v='你';
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
#5
iconv
#6
mark学习下
#7
你这是一个典型的Unicode<=>Ascii互换问题。
按照下面的代码,用strtr就可以简单的做到。
但是,需要做两个互换字符的数组。
已经存在县有数据的情况下,写个小程序,自动生成互换数组的代码不成问题。
$data= array(
'\u30c6'=>'全',
'\u30c7'=>'字');
var_dump(strtr('\u30c6中文\u30c7', $data));
注意:
1.不要轻易用正则
2.PHP对单个字符操作的API很少,尽可能用整体转换的函数
#8
测试了一下楼上froole兄的,可以输出,应能满足楼主应用
但直接输出'\u30c6',不行
我记不清了\u30c6哪种编码了,unicode码还是utf-8,还是html的内码?
但直接输出'\u30c6',不行
我记不清了\u30c6哪种编码了,unicode码还是utf-8,还是html的内码?
#9
4楼的在文件是utf-8的情况下通过,但如果不是utf-8的不行
另外,如果知道一个字符的unidcode码,如何输字符:如4f60 输出‘你’
另外,如果知道一个字符的unidcode码,如何输字符:如4f60 输出‘你’
#10
4楼的,如果文件是ISO-8859-1
,下面的这个就不行,不知为什么?
$v=iconv("ISO-8859-1", "UTF-8", "你");
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
,下面的这个就不行,不知为什么?
$v=iconv("ISO-8859-1", "UTF-8", "你");
echo getUnicodeFromOneUTF8($v); //得到unicode码4f60
#11
不是不能输出,而是你显示不了。
lz要的功能感觉像java中native2ascii实现的功能,
而不是普通的在HTML中所显示的编码转换问题。