A. php中有没有类似urlencode一样转换英文字符的函数
这是两个php自带的unicode标准函数,具体用法可以查manuel
第一个参数是你要转换的字符串
第二个参数是encode的类型例如'ISO-8859-2'
第三个参数可以不用.
string unicode_encode ( unicode $input , string $encoding [, int $errmode ] )
unicode unicode_decode ( string $input , string $encoding [, int $errmode ] )
B. urlencode进行转换后 为什么空格是+号 不是%20
可以看看PHP的函数urlencode() 和 rawurlencode()函数的实现方式,第二个是raw转换,会把对应的空格更换成 %20 的编码方式。
%20 是空格的 URL 字符编码。
[ol][*] [*]$new_true_url = iconv('gbk','utf-8',$true_url);
[*]$down_true_url =??urlencode($new_true_url);
[*]$down_true_url =str_replace("%3A%2F%2F", "://", $down_tr。
使用编码函数就可以将特定字符转换成规定的字符编码,包括空格等。解码函数功能刚好相反。参数是需要处理的字符串,返回值是处理好的字符串。不过这些函数作用都有差异,详细内容可以自己查看资料。
(2)phpurlencode编码扩展阅读:
编码原理:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
比如:
空格ASCII码是32,对应16进制是20,那么urlencode编码结果是:%20,但在新标准中空格对应的是+,见RFC-1738
比如:
中ASCII码是-10544,对应的16进制是D6D0,那么urlencode编码结果是:%D6%D0。
C. 为什么php中用了urlencode处理字符串后,浏览器自动又转了回来
有两中解决办法:
1.文件编码改为ansi类型的,
2.文件类型还是为utf-8的,
$bdc_music_title_encode=urlencode($bdc_music_title_encode);
改为:
$bdc_music_title_encode=iconv('utf-8','gbk',$bdc_music_title_encode);
$bdc_music_title_encode=urlencode($bdc_music_title_encode);
D. php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下。
复制代码
代码如下:
<?php
$file_name
=
urlencode($_REQUEST['filename']);
header("Pragma:
public");
header("Expires:
0");
header("Cache-Control:
must-revalidate,
post-check=0,
pre-check=0");
header("Content-Type:
application/force-download");
header('Content-Type:
application/vnd.ms-excel;
charset=utf-8');
header("Content-Transfer-Encoding:
binary");
header('Content-Disposition:
attachment;
filename='.$file_name);
echo
stripslashes($_REQUEST['content']);
?>
解决PHP
Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码就可以解决了。
解决方案一(我的页面是utf-8编码):
复制代码
代码如下:
$filename
=
"中文.txt";
$ua
=
$_SERVER["HTTP_USER_AGENT"];
$encoded_filename
=
urlencode($filename);
$encoded_filename
=
str_replace("+",
"%20",
$encoded_filename);
header('Content-Type:
application/octet-stream');
if
(preg_match("/MSIE/",
$ua))
{
header('Content-Disposition:
attachment;
filename="'
.
$encoded_filename
.
'"');
}
else
if
(preg_match("/Firefox/",
$ua))
{
header('Content-Disposition:
attachment;
filename*="utf8'''
.
$filename
.
'"');
}
else
{
header('Content-Disposition:
attachment;
filename="'
.
$filename
.
'"');
}
解决方法二
将文件名先urlencode一下再放入header,如下。
代码如下:
复制代码
代码如下:
<?php
$file_name
=
urlencode($_REQUEST['filename']);
header("Pragma:
public");
header("Expires:
0");
header("Cache-Control:
must-revalidate,
post-check=0,
pre-check=0");
header("Content-Type:
application/force-download");
header('Content-Type:
application/vnd.ms-excel;
charset=utf-8');
header("Content-Transfer-Encoding:
binary");
header('Content-Disposition:
attachment;
filename='.$file_name);
echo
stripslashes($_REQUEST['content']);
?>
E. PHP的。UTF-8编码的网页下面,如何将urlencode转成GB2312编码的
echo urlencode(iconv('utf-8', 'gb2312', '中国人'));
先把 中国人 编码转成 gb2312,然后再urlencode编码一次