免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lenruobin
打印 上一主题 下一主题

如何正确取得从其他网站get过来的utf8 编码的变量? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-06-28 00:21 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

你们做短信,没有遇到这样的问题吗?

论坛徽章:
0
12 [报告]
发表于 2004-06-28 08:42 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

我做过你上面所说的 URL方式合作传上下行数的

我只是在收或接的时候用 urlencode/urldecode 相互转换即可. 中文也适应~

urlencode在执行中~通过echo 的URL 看上去也像乱码.    但在urldecode接收时做转换也就可以了!

    

论坛徽章:
0
13 [报告]
发表于 2004-06-28 10:39 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

他那边发过来的我没法让他urlencode呀。光我自己这边urlencode/urldecode也没用呀.。

论坛徽章:
0
14 [报告]
发表于 2004-06-28 10:45 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

我对php不是很熟悉,不过不知道如果用 $_SERVER['QUERY_STRING'] 或者$_ENV['QUERY_STRING']把整个query string拿下来,然后手动提取变量,可以吗

论坛徽章:
0
15 [报告]
发表于 2004-06-28 13:42 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

没用,我用下面的函数把整个当前的所有变量都拿下来了。还是分离不出来。结果是这样的。
http://192.168.0.200/get.php?mobile=136913&month=8&srcmobile=13691&sender=&svid=test&msg=请帮我查一下本辆摩托车的真俿uid=ZQ1315&password=ZQ1315
  1. function AbsoluteUrl() {
  2.     GLOBAL $HTTP_SERVER_VARS;
  3.     $HTTPS      =$HTTP_SERVER_VARS["HTTPS"];
  4.     $HTTP_HOST  =$HTTP_SERVER_VARS["HTTP_HOST"];
  5.     $SCRIPT_URL =$HTTP_SERVER_VARS["SCRIPT_URL"];
  6.     $PATH_INFO  =$HTTP_SERVER_VARS["PATH_INFO"];
  7.     $REQUEST_URI=$HTTP_SERVER_VARS["REQUEST_URI"];
  8.     $SCRIPT_NAME=$HTTP_SERVER_VARS["SCRIPT_NAME"];

  9.     $QUERY_STRING=$HTTP_SERVER_VARS["QUERY_STRING"];
  10.     if (get_magic_quotes_gpc()==1) $QUERY_STRING=stripslashes($QUERY_STRING);
  11.     if ($QUERY_STRING!="") $QUERY_STRING="?".$QUERY_STRING;

  12.     $uri_http=(((strtolower($HTTPS)=="off")or($HTTPS==0)) ? 'http' : 'https') . '://' . $HTTP_HOST ;
  13.    
  14.     if (isset($SCRIPT_URL))
  15.          $url=$SCRIPT_URL;

  16.     else if (isset($PATH_INFO))
  17.             $url = $PATH_INFO;

  18.          else if (isset($REQUEST_URI))
  19.                  $url = $REQUEST_URI;

  20.               else if (isset($SCRIPT_NAME))
  21.                      $url = $SCRIPT_NAME;

  22.     $url=$uri_http.$url.$QUERY_STRING;

  23.     return $url;
  24. }
复制代码

论坛徽章:
0
16 [报告]
发表于 2004-06-28 15:08 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

get提交是从别的网过来的,我没办法改变。据他们说asp jsp 都可以解析。php 难到不可以解析吗?

伙计,是别人向你提交查询,也就是别人用你的服务,他们的代码不干净,难道还有权利向你质问吗?要我根本就不会跟这帮人打交道,这么烂的东西也拿出来骗钱,道德人品绝对有问题。

geel的想法是可行的,(见附件),但是问题的症结还是在提交查询的时候,否则你累死你没有办法适应各种不规范的写法。

我的环境
Win XP
Apache 1.3.29
PHP 4.3.6
IE 6

你按照附件的样子,用utf-8格式做好这个文件,文件名强烈建议使用fuckingencoder.php 存放在服务器上。然后在IE地址栏里写上“ http://localhost/fuckingencoder.php?msg=请帮我查一下本辆摩托车的真假&uid=ZQ1315 ”
然后回车你就能得到你想要的结果了。
祝你好运!

utf8problem.gif (11 KB, 下载次数: 73)

这个PHP文件是用utf-8格式编辑保存的

这个PHP文件是用utf-8格式编辑保存的

论坛徽章:
0
17 [报告]
发表于 2004-06-28 15:29 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

fuck encoder !!!

论坛徽章:
0
18 [报告]
发表于 2004-06-28 17:07 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

[quote]原帖由 "lenruobin"]他那边发过来的我没法让他urlencode呀。光我自己这边urlencode/urldecode也没用呀.。[/quote 发表:


那是当然的

但是~如果你没办法让对方传送你的时候作URL转码...是英文或数字还好些,,如果有中文的话~-_-~  

真的是没有办法~接收正确内容啊!!!!!

论坛徽章:
0
19 [报告]
发表于 2004-06-28 17:18 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

原帖由 "shukebeita" 发表:

伙计,是别人向你提交查询,也就是别人用你的服务,他们的代码不干净,难道还有权利向你质问吗?要我根本就不会跟这帮人打交道,这么烂的东西也拿出来骗钱,道德人品绝对有问题。

geel的想法是可行的,(见附件?.........


先感谢shukebeita 大哥。
我的测试方法是这样的:
send.php 用来模拟从别的网发过来的请求。
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">;
  2. <html>;
  3. <head>;
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">;
  5. <title>;test</title>;
  6. </head>;

  7. <body>;
  8. <?
  9. $fp=fopen("http://192.168.0.200/get.php?mobile=13691&month=8&srcmobile=13691&sender=$sender&svid=test&msg=请帮我查一下本辆摩托车的真假&uid=ZQ1315&password=ZQ1315 ","r");
  10. ?>;
  11. </body>;
  12. </html>;
复制代码

get.php 用来接收数据

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">;
  2. <html>;
  3. <head>;
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">;
  5. <title>;test</title>;
  6. </head>;
  7. <body>;
  8. <?
  9. $fp = fopen('test.txt','w');
  10. $msg=urldecode(urlencode($_ENV["QUERY_STRING"]));
  11. //$msg=iconv('gb2312','utf-8',$msg);
  12. if($fp)
  13.    {
  14.     flock($fp, 3);
  15.     fwrite($fp,$msg) or die('写文件错误');
  16.     flock($fp, 1);
  17.   }

  18. ?>;
  19. </body>;
  20. </html>;
复制代码

如果用记事本看
test.txt里的内容
[code]msg=璇峰府鎴戞煡涓

未标题-2.gif (12.39 KB, 下载次数: 64)

日志里的内容

日志里的内容

未标题-1.gif (39.22 KB, 下载次数: 74)

test.txt的内容

test.txt的内容

论坛徽章:
0
20 [报告]
发表于 2004-06-28 19:21 |只看该作者

如何正确取得从其他网站get过来的utf8 编码的变量?

嘿,还真是麻烦呀。折腾我大半天。

先说结论 apache+php+windows 在以get方式接收未经过url编码的汉字变量时有可能出错。以往我的开发都在Linux下做,而且总是使用urlencode来编码所以忽略了这个问题。

我把你的测试代码修改了一下同时放在两个服务器上作了试验。
192.168.0.52 Windows XP
192.168.0.51 Linux

send8.php

  1. <html>;
  2. <head>;
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">;
  4. <title>;test</title>;
  5. </head>;

  6. <body>;
  7. <?

  8. function showResult($server,$getString)
  9. {
  10.        
  11.         $fp=fopen($server.$getString,"r");
  12.         while (!feof ($fp)) {
  13.            $buffer = fgets($fp, 4096);
  14.            echo $buffer;
  15.         }
  16.         fclose ($fp);
  17. }
  18. $linuxServer        ='http://192.168.0.51/question/';
  19. $winServer                = 'http://192.168.0.52/question/';
  20. $sender                        ="傻瓜";
  21. $qString = "receiver8.php?mobile=13691&month=8&srcmobile=13691&sender=$sender&svid=test&msg=请帮我查一下本辆摩托车的真假&uid=ZQ1315&password=ZQ1315";

  22. //query the receiver8.php at linux server.
  23. echo('Result from linux: <br>;');
  24. showResult($linuxServer,$qString);
  25. echo('<hr>;');

  26. //query the receiver8.php at win server.
  27. echo('Result from win: <br>;');
  28. showResult($winServer,$qString);
  29. ?>;
  30. </body>;
  31. </html>;
复制代码

receiver8.php

  1. <html>;
  2. <head>;
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">;
  4. <title>;test</title>;
  5. </head>;
  6. <body>;
  7. <?
  8. $fp = fopen('test.txt','wb');
  9. //$msg=urldecode(urlencode($_ENV["QUERY_STRING"]));
  10. $params = split('&',$_SERVER["QUERY_STRING"]);
  11. var_dump($params);
  12. if($fp)
  13.    {
  14.     flock($fp, 3);
  15.         foreach ($params as $key=>;$param) {
  16.         fwrite($fp,$param."\n") or die('写文件错误');
  17.         }
  18.     flock($fp, 1);
  19.   }

  20. ?>;
  21. </body>;
  22. </html>;
复制代码



建议方案:
1、如果要在程序里传递url变量一定要用urlencode编码,否则后患无穷,子孙后代将遭人强烈鄙视。
2、建议使用linux服务器环境。

utf8problem.gif (72.83 KB, 下载次数: 77)

效果图

效果图
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP