关于js和php对url编码的处理方法
处理URL中的汉字编码:JS与PHP的协同工作
在进行网页开发时,我们经常需要处理URL中的汉字编码问题。本文将介绍如何使用JavaScript(JS)和PHP对URL中的汉字进行编码和解码处理。
一、使用JavaScript对URL中的汉字进行escape编码
在HTML中,我们可以使用JavaScript的escape函数对URL中的汉字进行编码。以下是一个简单的示例:
```html
```
这将生成类似以下的URL:
```bash
```
二、PHP解码JS escape编码的URL参数
使用PHP的urldecode()或base64_decode()函数无法解码上述JS escape编码的URL参数。为了解决这个问题,我们需要使用PHP编写一个解码函数。以下是解码函数的示例代码:
```php
function js_unescape($str){
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++){
if ($str[$i] == '%' && $str[$i+1] == 'u'){
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
} else if ($str[$i] == '%'){
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
} else {
$ret .= $str[$i];
}
}
return $ret;
}
```
在解码前,需要注意JS编码会自动转换为UTF-8编码,因此我们需要进行编码转换才能得到正确的结果,否则可能会出现中文乱码。以下是使用iconv函数进行编码转换的示例代码:
```php
print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));
```
三、PHP实现JS的escape编码
除了解码JS escape编码的URL参数,我们还找到了一个用PHP实现JS的escape编码的函数。以下是该函数的示例代码:
```php
function phpescape($str){
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++){
if(ord($str[$i])>=127){
$tmpString=bin2hex(iconv("gb2312","ucs-2",substr($str,$i,2))); //可能需要根据实际情况调整这部分代码,特别是在不同的系统或环境下。 //$tmpString=substr($tmpString,2,2).substr($tmpString,0,2);window下可能要打开此项 $retrunString.="%u".$tmpString;$i++;} else { $retrunString.="%".dechex(ord($str[$i]));} }return $retrunString;}`该函数将汉字转换为相应的十六进制编码,并以"%u"开头,符合JavaScript的escape编码规则。四、总结本文介绍了如何使用JavaScript和PHP对URL中的汉字进行编码和解码处理。我们使用JavaScript的escape函数对URL中的汉字进行编码;然后,我们使用PHP编写解码函数来解码JS escape编码的URL参数;我们还找到了一个用PHP实现JS的escape编码的函数。掌握了这些方法,我们就可以在处理URL中的汉字编码问题时更加得心应手。希望本文能对你有所帮助。`请注意,以上代码可能需要根据你的实际环境和需求进行调整和优化。特别是在处理字符编码时,不同的系统和环境可能会有不同的表现和要求。请务必在实际环境中进行测试和验证。
编程语言
- 关于js和php对url编码的处理方法
- 微信小程序实现漂亮的弹窗效果
- WordPress自定义时间显示格式
- 前端ajax的各种与后端交互的姿势
- js数据类型检测总结
- Vue中的v-for循环key属性注意事项小结
- PHP怎样用正则抓取页面中的网址
- PHP图片自动裁切应付不同尺寸的显示
- 微信小程序sessionid不一致问题解决
- 基于js 本地存储(详解)
- JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种
- JS+CSS实现另类带提示效果的竖向导航菜单
- 基于es6三点运算符的使用方法(实例讲解)
- C#使用PHP服务端的Web Service通信实例
- thinkPHP简单实现多个子查询语句的方法
- 浅谈COOKIE和SESSION区别