Encode text to html.

本文介绍了一种将HTML文本进行转义处理的方法,通过使用StringBuilder遍历字符串并替换特殊字符来实现。此方法能够有效避免HTML注入等问题,确保网页内容的安全显示。

    /**
     * Encode text to html.
     */
    public static String encodeHtml(String html) {
        StringBuilder sb = new StringBuilder(html.length());
        for(int i=0; i<html.length(); i++) {
            char c = html.charAt(i);
            switch(c) {
            case ' ':
                sb.append("&nbsp;");
                break;
            case '&':
                sb.append("&amp;");
                break;
            case '<':
                sb.append("&lt;");
                break;
            case '>':
                sb.append("&gt;");
                break;
            case '/n':
                sb.append("<br/>");
                break;
            case '/r':
                break;
            //case '/'':
            //    sb.append("&apos;");
            //    break;
            case '/"':
                sb.append("&quot;");
                break;
            default:
                sb.append(c);
            }
        }
        return sb.toString();
    }

在使用 Python 进行 HTML 解析时,提取中文文本出现乱码问题通常与网页的编码格式、解析库的默认处理方式或输出环境的编码设置有关。以下是几种常见的解决方法,可结合具体场景选择适用的方案。 ### 方法一:指定正确的编码格式 在获取网页内容后,可以通过检查响应头或网页内容确定正确的编码格式,并在解析时显式指定。`requests` 库的 `Response` 对象提供了 `encoding` 和 `apparent_encoding` 属性,其中 `apparent_encoding` 会基于网页内容进行编码推断,通常比 `encoding` 更准确。 ```python import requests from bs4 import BeautifulSoup url = 'https://example.com' response = requests.get(url) response.encoding = response.apparent_encoding # 使用自动检测的编码格式 soup = BeautifulSoup(response.text, 'html.parser') text = soup.get_text() print(text) ``` ### 方法二:手动解码和编码处理 在某些情况下,即使指定了正确的编码格式,仍可能出现乱码。此时可以尝试将字符串先以错误的编码(如 `ISO-8859-1`)进行编码,再以正确的编码(如 `GBK` 或 `UTF-8`)解码。 ```python wrong_encoding_text = '乱\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0码示例' correct_text = wrong_encoding_text.encode('ISO-8859-1').decode('GBK') print(correct_text) ``` ### 方法三:使用 `BeautifulSoup` 指定解析编码 在使用 `BeautifulSoup` 解析网页时,若网页本身未明确声明编码格式,可能会默认使用 `ISO-8859-1`,从而导致中文显示异常。可以在构造 `BeautifulSoup` 对象时指定 `from_encoding` 参数,以确保正确解析中文。 ```python from bs4 import BeautifulSoup html = '<html><body><p>中文内容</p></body></html>' soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8') text = soup.find('p').text print(text) ``` ### 方法四:处理文件写入时的编码问题 若提取后的中文文本在写入文件时出现乱码,建议使用 `utf_8_sig` 或 `gbk` 等编码方式,确保文件被正确识别。 ```python import pandas as pd data = {'Text': ['中文内容', '繁體內容']} df = pd.DataFrame(data) df.to_csv('output.csv', encoding='utf_8_sig', index=False) ``` ### 方法五:设置控制台编码环境 在 Windows 命令行中运行 Python 脚本时,控制台默认编码可能为 `cp936`,而脚本内部使用 `UTF-8` 编码,也可能导致乱码。可以通过修改控制台编码为 `UTF-8` 或在代码中统一编码处理。 ```python import sys import os os.system('chcp 65001 >nul') # 将控制台编码设置为 UTF-8 sys.stdout.reconfigure(encoding='utf-8') print('中文内容') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值