我开发的系统是UTF-8版本的,发布的时候需要转换出一个GBK版本,没有好的解决方案,求高手帮忙。
5 个解决方案
#1
你能知道都是哪些字符不能被转换吗?
知道了,才能有解决办法吧?
你或许可以贴出一段包含不可转换字符的文字的 base64 编码
知道了,才能有解决办法吧?
你或许可以贴出一段包含不可转换字符的文字的 base64 编码
#2
内容是不固定的,开发了一套utf8版本的PHP程序,然后整个目录转换成GBK,百度搜索了很多,应该是那个UTF8的空白分隔符是转不出GBK的
#3
你不能找一下吗?既然你都发现转码除了你问题,那么不就是那个串吗?
或者你造一段也可以,只要是含有不能转码的字符就行
或者你造一段也可以,只要是含有不能转码的字符就行
#4
转换代码,保存为UTF8文件
utf8.php请保存为UTF8文件
用两个不同的函数转换出的gbk文件,一个是去除了中文注释,一个是全部变成问号。
<?php
$tmp = file_get_contents('utf8.php');
$gbk = iconv('UTF-8', 'GBK//IGNORE', $tmp);
file_put_contents('gbk.php', $gbk);
$tmp = mb_convert_encoding($tmp, 'GBK', 'UTF-8');
file_put_contents('gbk1.php', $tmp);
echo 'success';
?>
utf8.php请保存为UTF8文件
<?php
// 文章模块控制器
class ArticleAction extends BaseAction {
protected function _initializeMore() {
$this -> obj = M('article');
$this -> categoryObj = M('category');
$this -> assign('category', $this -> categoryObj -> categoryModule('article')); //设置标签类的栏目数组为当前模块栏目数组
}
public function defaults() {
$page = intval(R('page'));
$pageSize = 20;
$passed = R('passed') === ''?1:intval(R('passed'));
$recycle = intval(R('recycle'));
$where = array('recycle' => $recycle, 'passed' => $passed);
$headline = R('headline');
$headline && $where['headline'] = 1; //头条信息
$elite = R('elite');
$elite && $where['elite'] = 1; //推荐信息
$ontop = R('ontop');
$ontop && $where['ontop'] = 1; //置顶信息
$catid = intval(R('catid'));
if ($catid) {
$tmp = $this -> categoryObj -> childAll($catid, C('isbigpost', 0, 'article'), true);
$where[] = count($tmp) > 1?'catid IN (' . implode(', ', $tmp) . ')':'catid=' . intval(current($tmp));
}
$q = R('q');
$q = trim(urldecode($q));
$q = Func :: FilterSearch($q);
$this -> assign('q', $q);
if ($q) {
$q = explode(' ', $q);
$or = array();
foreach($q as $word) {
if ($word) {
$or[] = "title LIKE '%$word%'";
$or[] = "keywords LIKE '%$word%'";
}
}
empty($or) or $where[] = $or;
}
$this -> assign('data', $this -> obj -> getList($page, $pageSize, $where, 'updatetime DESC, id DESC'));
$this -> assign('pages', $this -> obj -> pages());
$this -> assign('catid', $catid);
$this -> assign('passed', $passed);
$this -> assign('recycle', $recycle);
$this -> assign('headline', $headline);
$this -> assign('elite', $elite);
$this -> assign('ontop', $ontop);
$this -> assign('jmpurl', '?' . del_query_string('catid|page|q'));
$this -> assign('orderurl', '?' . del_query_string('order|field'));
$this -> assign('order', strtoupper(R('order')) == 'DESC'?'ASC':'DESC');
$this -> display('article');
}
// 审核通过
public function check() {
if ($this -> obj -> setFields(array('checker' => get_cookie('username'), 'checktime' => TIME, 'passed' => 1))) $this -> showMsg(L('OPERATE_SUCCESS'), $this -> referer);
else $this -> showMsg($this -> error);
}
}
?>
用两个不同的函数转换出的gbk文件,一个是去除了中文注释,一个是全部变成问号。
#5
原来我错了,原来文件保存的是ANSI编码的,再转换才出现了这样的问题
#1
你能知道都是哪些字符不能被转换吗?
知道了,才能有解决办法吧?
你或许可以贴出一段包含不可转换字符的文字的 base64 编码
知道了,才能有解决办法吧?
你或许可以贴出一段包含不可转换字符的文字的 base64 编码
#2
内容是不固定的,开发了一套utf8版本的PHP程序,然后整个目录转换成GBK,百度搜索了很多,应该是那个UTF8的空白分隔符是转不出GBK的
#3
你不能找一下吗?既然你都发现转码除了你问题,那么不就是那个串吗?
或者你造一段也可以,只要是含有不能转码的字符就行
或者你造一段也可以,只要是含有不能转码的字符就行
#4
转换代码,保存为UTF8文件
utf8.php请保存为UTF8文件
用两个不同的函数转换出的gbk文件,一个是去除了中文注释,一个是全部变成问号。
<?php
$tmp = file_get_contents('utf8.php');
$gbk = iconv('UTF-8', 'GBK//IGNORE', $tmp);
file_put_contents('gbk.php', $gbk);
$tmp = mb_convert_encoding($tmp, 'GBK', 'UTF-8');
file_put_contents('gbk1.php', $tmp);
echo 'success';
?>
utf8.php请保存为UTF8文件
<?php
// 文章模块控制器
class ArticleAction extends BaseAction {
protected function _initializeMore() {
$this -> obj = M('article');
$this -> categoryObj = M('category');
$this -> assign('category', $this -> categoryObj -> categoryModule('article')); //设置标签类的栏目数组为当前模块栏目数组
}
public function defaults() {
$page = intval(R('page'));
$pageSize = 20;
$passed = R('passed') === ''?1:intval(R('passed'));
$recycle = intval(R('recycle'));
$where = array('recycle' => $recycle, 'passed' => $passed);
$headline = R('headline');
$headline && $where['headline'] = 1; //头条信息
$elite = R('elite');
$elite && $where['elite'] = 1; //推荐信息
$ontop = R('ontop');
$ontop && $where['ontop'] = 1; //置顶信息
$catid = intval(R('catid'));
if ($catid) {
$tmp = $this -> categoryObj -> childAll($catid, C('isbigpost', 0, 'article'), true);
$where[] = count($tmp) > 1?'catid IN (' . implode(', ', $tmp) . ')':'catid=' . intval(current($tmp));
}
$q = R('q');
$q = trim(urldecode($q));
$q = Func :: FilterSearch($q);
$this -> assign('q', $q);
if ($q) {
$q = explode(' ', $q);
$or = array();
foreach($q as $word) {
if ($word) {
$or[] = "title LIKE '%$word%'";
$or[] = "keywords LIKE '%$word%'";
}
}
empty($or) or $where[] = $or;
}
$this -> assign('data', $this -> obj -> getList($page, $pageSize, $where, 'updatetime DESC, id DESC'));
$this -> assign('pages', $this -> obj -> pages());
$this -> assign('catid', $catid);
$this -> assign('passed', $passed);
$this -> assign('recycle', $recycle);
$this -> assign('headline', $headline);
$this -> assign('elite', $elite);
$this -> assign('ontop', $ontop);
$this -> assign('jmpurl', '?' . del_query_string('catid|page|q'));
$this -> assign('orderurl', '?' . del_query_string('order|field'));
$this -> assign('order', strtoupper(R('order')) == 'DESC'?'ASC':'DESC');
$this -> display('article');
}
// 审核通过
public function check() {
if ($this -> obj -> setFields(array('checker' => get_cookie('username'), 'checktime' => TIME, 'passed' => 1))) $this -> showMsg(L('OPERATE_SUCCESS'), $this -> referer);
else $this -> showMsg($this -> error);
}
}
?>
用两个不同的函数转换出的gbk文件,一个是去除了中文注释,一个是全部变成问号。
#5
原来我错了,原来文件保存的是ANSI编码的,再转换才出现了这样的问题