php网页抓取乱码(PHPwebService服务器本地语言的Get方法获取参数时获取到的参数)

优采云 发布时间: 2022-03-09 12:16

  php网页抓取乱码(PHPwebService服务器本地语言的Get方法获取参数时获取到的参数)

  最近在做PHP webService服务器,发现使用Get方法获取参数时获取的参数是乱码。经过一番折腾,发现浏览器本地语言的问题。首先,我们来看一下简单的测试代码:

  header("内容类型:text/html;charset=UTF-8");

  $name=['name'];

  var_dump($name);

  测试结果如下:

  

  代码声明响应内容的编码为utf-8,显示的内容确实是乱码。这里请注意var_dump输出的变量长度只有4。显然,utf-8编码下两个汉字的长度必须大于4字节,接下来我们看一下火狐访问这个的url页

  

  FireFox会自动对中文url进行编码,所以我们可以看到测试变成了%B2%E2%CA%D4。显然,这里的一个词是两个字节,是 gb2313、gbk 等中文编码格式,而不是 utf-8 编码。如果我们将页面的编码切换为gbk,中文参数会正常显示,见下图

  

  接下来我们再做一个测试,代码如下:

  header("内容类型:text/html;charset=UTF-8");

  $name=['name'];

  var_dump($name);

  测试结果,正常显示:

  

  那么,是什么导致了这个问题呢?

  答案是浏览器的默认编码有问题。我们都使用中文系统,浏览器的默认编码自然会设置为本地化。比如我自己电脑上IE和FireFox的默认编码都是gb系列。

  当浏览器请求用户输入的url时,会以默认编码格式而不是页面默认编码格式发送url中的中文,这就是为什么页面中带有中文的链接是正常的,链接我们手动输入

  乱码的原因。同样,如果我们将浏览器的默认编码调整为utf-8,那么输入url中的中文就会按照utf-8进行编码。

  除上述情况外,还会在以下情况下发生这种情况:

  如果gbk编码页面生成的地址链接到utf-8页面,gbk页面的中文以gbk格式编码传输到下一页,那么utf-8后面肯定会出现乱码收到编码。

  IIS的url重写模块,重写的中文编码也是gbk,如果你的页面是utf-8编码,那么重写参数会失效。在这些情况下,我们需要使用php内置的转码功能来处理编码问题:

  计划一:

  $name"gbk","utf-8",$name);

  场景二:

  $name,"utf-8","gbk");

  PS:实测IE浏览器默认GET编码方式采用占用空间最小的方式,即使用GBK码,在php页面中加入这个转换功能即可正常使用。Firefox 和 Chrom 默认为 UTF-8,没有此转换功能。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线