html页面传递中文参数发生乱码问题

本文介绍了URL编码的原因及其解决方案,包括百分号编码方法,并演示了如何处理中文参数。

我们知道如果url地址中包含中文时,一般浏览器都会将其重新编码成对应的字符。

一.URL编码出现原因
URL 只能使用 ASCII 字符集来通过因特网进行发送。 也就是说URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号 。这意味着 如果URL中有汉字,就必须编码后使用。但是麻烦的是 标准的国际组织并没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。这导致”URL编码”成为了一个混乱的领域。

二.URL编码解决方案

Url编码通常也被称为百分号编码,是因为它的编码方式非常简单,使用%百分号加上两位的字符——0123456789ABCDEF——代表一个字节的十六进制形式。Url编码默认使用的字符集是US-ASCII。例如a在US-ASCII码中对应的字节是0x61,那么Url编码之后得到的就是%61,我们在地址栏上输入http://g.cn/search?q=%61%62%63,实际上就等同于在google上搜索abc了。又如@符号在ASCII字符集中对应的字节为0x40,经过Url编码之后得到的是%40。

对于非ASCII字符,需要使用ASCII字符集的超集进行编码得到相应的字节,然后对每个字节执行百分号编码。对于Unicode字符,RFC文档建议使用utf-8对其进行编码得到相应的字节,然后对每个字节执行百分号编码。如”中文”使用UTF-8字符集得到的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87,经过Url编码之后得到”%E4%B8%AD%E6%96%87”。

详细URL编码信息http://www.cnblogs.com/jerrysion/p/5522673.html

三.中文参数编码

浏览器中地址栏出现的中文参数在向后台提交参数时,浏览器会自动将中文进行编码再向后台提交数据。

我们假设需要将a页面中的参数传递中b页面中。

a页面如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
    <div id="main" style="width: 850px; height: 500px">
    <a href="b.html?abc=南京">向b页面传递参数</a>
    </div>
</body>
</html>

b页面如下:

<html>
<meta charset="utf-8">
<script>
function getParams(key) {
    var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)"); 
   //如果地址栏中出现中文则进行编码    
    var r = encodeURI(window.location.search).substr(1).match(reg);  
    if (r != null) {  
        //将中文编码的字符重新变成中文
        return decodeURI(unescape(r[2]));  
    }  
    return null;  
};
data=getParams("abc")
alert(data)
</script>
</html>
### Properties 文件输出到网页时的中文乱码解决方案 当 `properties` 文件中的内容被加载并输出到网页时,如果出现中文乱码问题,通常是因为编码不一致引起的。以下是详细的分析和解决方案: #### 1. **Properties 文件本身的编码** 确保 `properties` 文件保存为 UTF-8 编码格式[^3]。可以通过 IDE 的设置来调整文件编码。例如,在 IDEA 中: - 打开设置 (`Settings`) 并搜索 `File Encodings`。 - 将全局编码 (`Global Encoding`) 和项目编码 (`Project Encoding`) 设置为 UTF-8。 - 勾选选项 `Transparent native-to-ascii conversion`,这可以防止 `properties` 文件中的注释或其他非 ASCII 字符显示异常。 #### 2. **加载 Properties 文件时的编码处理** Java 默认会以 ISO-8859-1 编码方式解析 `.properties` 文件的内容。因此,即使文件本身是以 UTF-8 存储的,读取时仍可能出现乱码。为了正确加载其中的中文字符,可以在程序中手动指定解码逻辑[^4]。 以下是一个示例代码片段,展示如何通过重新编码的方式解决乱码问题: ```java import java.io.*; import java.nio.charset.StandardCharsets; import java.util.Properties; public class PropertyLoader { public static void main(String[] args) throws IOException { Properties properties = new Properties(); try (InputStream inputStream = new FileInputStream("config.properties")) { // 使用 InputStreamReader 明确指定编码为 UTF-8 properties.load(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); // 获取属性值并打印 String value = properties.getProperty("key"); System.out.println(value); } } } ``` #### 3. **Web 应用中的响应编码** 在 Web 开发场景下,还需要确保服务器端返回给浏览器的数据采用正确的编码。具体来说: - 如果使用的是 JSP 页面,则需确认页面顶部有如下声明: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ``` - 对于 Servlet 或其他 Java 后端代码,应在发送响应前设置合适的字符集: ```java response.setContentType("text/html;charset=UTF-8"); ``` #### 4. **前端 HTML编码声明** 最后一步是验证客户端是否能够正确解释接收到的数据。HTML 文档应包含 `<meta>` 标签定义其使用的字符集: ```html <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> ``` 以上措施综合起来可有效避免因编码差异而导致的乱码现象。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值