|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可以在书上很方便地做标记,及时记下自己的心得体会。 凡是情形下,咱们的网页要指定一个编码字符集,如 GB2312、UTF-8、ISO-8859-1 等,如许咱们就能够在网页上显示咱们指定编码的文字了。然而咱们极可能会碰到这类情形,那就是咱们能够但愿在 ISO-8859-1 编码的网页上显示汉字,或在 GB2312 编码的网页上显示韩文等。固然一种处理举措就是咱们不必 ISO-8859-1 或 GB2312 编码,而一切都采取 UTF-8 编码,如许咱们只需在这类编码下,就能够夹杂显示列国文字了,这是如今良多网站采取的办法。
而我这里所说的并不是下面这类办法,由于下面这类办法必需要指定字符集为 UTF-8 才可以,一旦用户手工指定为其他字符集,或能够由于某些缘由,谁人字符集设置没起感化,而阅读器又没有准确主动辨认的话,咱们看到的网页仍是乱码,特别是在某些用框架作的网页中,某个框架中的页面假如字符集设置没起感化,在 firefox 中显示乱码并且还没法改动(我是说在不装RightEncode插件的情形下)。
而我这里引见的办法即便是把网页指定为 ISO-8859-1 字符集,也可以准确显示汉字、日文等。道理很复杂,就是把除 ISO-8859-1 编码中前128个字符之外的一切其他的编码都用 NCR(Numeric character reference) 来暗示。好比“汉字”这两个字,假如咱们写成“汉字”这类模式,那末它在恣意字符集下都可以准确显示。依据这个道理,我写了上面这个法式,它可以把现有的网页转化为在恣意字符集下都能显示的网页。你只需求指定源网页的字符集和源网页,点提交按钮,就能够失掉方针网页了。你也能够只转化某些文字,只需求把文字填写到文本框中,并指定这些文字本来的字符集,点提交按钮,就会在页面下面显示编码后的文字了。别的我还编写了WordPress 的插件,如今我的 Blog 已可以在恣意字符集下都能准确显示了。
完成办法:
起首第一步是要把源字符集的字符串转化为UTF-16字符集,做这一步是由于UTF-16字符集中的每一个字符都是两个字节,前面处置起来很轻易,而假如在源字符集上直接做处置则很庞杂。源字符集可以从原网页中的meta标签中取得,也能够独自指定,我的法式是让用户在表单中指定源字符集,由于我不克不及包管用户提交的文件就必定是HTML文件(其他文件也是可以的,好比这个WordPress的汉化包源文件是个po文件,它外面的内容也能够如许处置),并且即便是HTML文件,外面也纷歧定就有效于指定字符集的meta标签,所以经由过程表单独自指定字符集对照保险。你能够会感觉将一种字符集转化为另外一种字符集很庞杂,的确如斯,假如本人来完成的话,的确十分费事,然而用PHP来做却很轻易,由于它外面已包括如许的函数了,你可以经由过程iconv函数很轻易的来完成各类字符集之间的转化,假如你的机械上没有装置iconv扩大,你也能够利用mb_convert_encoding函数,假如Multibyte String扩大也没有装置,那就没举措了,由于你要本人完成那末多种编码的转化根基上是不成能的,除非你是顶级大牛!保举利用iconv,由于这个效力高,撑持的字符集也更多。
做完下面那一步以后,接上去是以每两个字节为单元对字符串停止处置。这两个字节直接转化为数字就是&#xxxxx;中的xxxxx,假如这个数字小于128就直接利用这个字符(注重这里就酿成单字节了),不然就利用&#xxxxx;的模式。这里有一点要注重,就是当这个数字是65279(16进制的0x FEFF)时,请把它疏忽失落,由于这个是Unicode编码中的传输掌握字符,而咱们如今的字符串已只要iso-8859-1编码中的前128个字符了,所以咱们不需求它了。
好了,根基思绪就是如许,上面是完成的法式:
以下为援用的内容:
<?php
function nochaoscode($encode, $str) {
$str = iconv($encode, "UTF-16BE", $str);
for ($i = 0; $i < strlen($str); $i++,$i++) {
$code = ord($str{$i}) * 256 + ord($str{$i + 1});
if ($code < 128) {
$output .= chr($code);
} else if ($code != 65279) {
$output .= "&#".$code.";";
}
}
return $output;
}
?>
函数的参数中,$encode是源字符集,$str是需求停止转化的字符串。前往了局是转化今后字符串。
虽说不上很好,但至少一般的数据操作,再在原有的SQL语言的基础上,用得还是可以的。 |
|