喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
     
标题: [问题] 数据库编码(GB2312-UTF8)问题  
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 736
帖子 479
金钱 736 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
数据库编码(GB2312-UTF8)问题

本来想采集的,就只等到入库了,可是却遇到了难题,我的页面编码为UTF-8格式,目标站为GB2312格式,正常入库后,数据里成了乱码,页面中也变成了乱码,我尝试在PHPMYADMIN中添加一个,测试发添加后的值都变成了“????”,怎么改都是。页面当然也是"????"了。

于是进一步的我将GB2312的目标页面用一个编码转换类转换成UTF8后(即在UFT-8下显示正常),用IE直接查看源码显示的还是GB2312时的正常状态,不过在Instant Source 下的原始码中,却是乱码,但页面正常。这个倒在我意料之中,但可疑的是为什么我的采集规则失去了作用。入库后的值都为空。

以前我也遇到过GB2312采集UTF-8(LRC歌词自动入库),不过经过编码转换后,一切正常入库。

望高人指点一二,我才学PHP+MYSQL,现在还只会模仿人家的写类似代码。
2006-11-24 11:57 PM#1
查看资料  Blog  发短消息  顶部
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 736
帖子 479
金钱 736 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
[推荐阅读] 一个搜索问题
新发现,用嗅探器看了下,发现居然可以直接伪造POST数据来完成 提交

如:直接在浏览器中打开http://127.0.0.1/od/admin.php?cm ... %A2%9E&submit=1

就可以增加一个名为“测试”的分类,其中%E6%B5%8B%E8%AF%95为“测试”的某种URL编码,这个应该是浏览器直接编码的,不过urlcode("测试")的值为%B2%E2%CA%D4,UNICODE的双字节值为6D4B 8BD5,但这种编码到底是哪种呢?我该怎样解析出来呢?
2006-11-25 12:43 AM#2
查看资料  Blog  发短消息  顶部
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 736
帖子 479
金钱 736 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
[推荐阅读] 400元,你干不干
哦,找到了,
urlencode(iconv("GB2312","UTF-8",“测试”))

不过我想知道有什么更新的方法吗
2006-11-25 01:33 AM#3
查看资料  Blog  发短消息  顶部
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 736
帖子 479
金钱 736 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
[推荐阅读] 招聘高级PHP程序员(北京)
呵呵,继续分析下,高手帮忙喽!
POST的字串:

/od/admin.php?cmd=categories_add &name=%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA&description=%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA&keywords=%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA&parent_id=6&sort=1&Submit=%E6%96%B0%E5%A2%9E&submit=1


<?php
其中
%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA为"系统增强",用 urlencode(iconv("GB2312","UTF-8",“系统增强))可得到。
现在看了一下源码中关于写数据库的部分 ,
[php]
    if (isset(
$_REQUEST['submit']))
    {
        
validate_types($_REQUEST, array('name' => 'STR''description' => 'STR''parent_id' => 'INT''order' => 'INT''keywords' => 'STR'));
        
        
$dbim->query('INSERT INTO '.DB_PREFIX.'categories
                        SET name = "'
.$_REQUEST['name'].'", 
                            description = "'
.$_REQUEST['description'].'", 
                            parent_id = "'
.$_REQUEST['parent_id'].'",
                            sort = "'
.$_REQUEST['sort'].'",
                            keywords = "'
.$_REQUEST['keywords'].'"');
    
        
$success true;
        
$categories_add->assign_var('success'$success);
    }
?>
在global.php中发现了validate_types函数

<?php
function validate_types(&$array$names)
{
    
// Get rid of magic quotes 
    
if (get_magic_quotes_gpc())
    {
        
$array array_map('stripslashes'$array);
    }
    
    
// Cycle through array
    
foreach ($names as $name => $type)
    {        
        
// Set types
        
if (isset($array["$name"]))
        {
            switch (
$type)
            {
                
// Set as integer
                
case 'INT':
                    
$array["$name"] = intval($array["$name"]);
                    break;
                
// Set as float
                
case 'FLOAT':
                    
$array["$name"] = floatval($array["$name"]);
                    break;
                
// string - trim data, strip slashes, banish HTML
                
case 'STR':
                    
$array["$name"] = mysql_real_escape_string(htmlspecialchars(strip_tags(trim($array["$name"]))));
                    break;
                
// string with html
                
case 'STR_HTML':
                    
$array["$name"] = mysql_real_escape_string(trim($array["$name"]));
                    break;
                
// Do nothing, i.e. arrays, etc.
                
default:
            }
        }
    }
    return 
$array;
}
?>
我思考的方法为当把 %E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA POST后经过validate_types后,变成了mysql_real_escape_string(htmlspecialchars(strip_tags(trim("%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA"))));
不过这样得到的值似乎没变,还是%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA
然后进行INSERT INTO的操作,它的流程应该是这样了,可我这样操作后数据库和前台页面中还是%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA这些字串,根本不是我想的“系统增强”。

希望大家一起帮我分析下,我说错的地方也请不要笑话,

[ 本帖最后由 millken 于 2006-11-25 03:33 PM 编辑 ]
2006-11-25 03:28 PM#4
查看资料  Blog  发短消息  顶部
 
21andy
高级会员
Rank: 4
初级会员



UID 68696
精华 0
积分 536
帖子 371
金钱 536 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-2-18
状态 离线
[推荐阅读] 调查?
urldecode()



我爱村姑
2006-11-25 03:45 PM#5
查看资料  发短消息  顶部
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 736
帖子 479
金钱 736 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
[推荐阅读] 关于smarty的初级问题!
非常感谢   测试通过
但搞不明白,在源代码中没有urldecode()

是浏览自动解析了吗?
2006-11-25 04:15 PM#6
查看资料  Blog  发短消息  顶部
 
niexa123
注册会员
Rank: 2
中级会员



UID 50950
精华 0
积分 152
帖子 259
金钱 152 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-11-18
状态 离线
[推荐阅读] 一周学会php视频教程
看一看了啊



http://www.ml188.org
2006-11-27 09:40 AM#7
查看资料  访问主页  Blog  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 2.348588 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP