PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php实现HTML实体编号与非ASCII字符串相互转换类实例

管理员 2025-03-06
工作总结
78

在 PHP 中,HTML 实体编号(如 &< 等)与非 ASCII 字符串(如中文、特殊符号等)之间的转换是一个常见的需求。PHP 提供了内置函数来实现这种转换,例如 htmlentities()html_entity_decode()mb_convert_encoding() 等。

以下是一个实现 HTML 实体编号与非 ASCII 字符串相互转换的 PHP 类实例。


实现功能

  1. 将非 ASCII 字符串转换为 HTML 实体编号

    • 例如:中文 → 中文

  2. 将 HTML 实体编号转换为非 ASCII 字符串

    • 例如:中文 → 中文


类实现

php
复制
<?phpclass HtmlEntityConverter{
    /**
     * 将非 ASCII 字符串转换为 HTML 实体编号
     *
     * @param string $input 输入字符串
     * @return string 转换后的字符串
     */
    public static function encode($input)
    {
        $encoded = '';
        $length = mb_strlen($input, 'UTF-8');

        for ($i = 0; $i < $length; $i++) {
            $char = mb_substr($input, $i, 1, 'UTF-8');
            if (mb_check_encoding($char, 'ASCII')) {
                $encoded .= $char; // ASCII 字符直接保留
            } else {
                $encoded .= '&#' . self::unicodeOrd($char) . ';'; // 非 ASCII 字符转换为实体编号
            }
        }

        return $encoded;
    }

    /**
     * 将 HTML 实体编号转换为非 ASCII 字符串
     *
     * @param string $input 输入字符串
     * @return string 转换后的字符串
     */
    public static function decode($input)
    {
        return html_entity_decode($input, ENT_QUOTES, 'UTF-8');
    }

    /**
     * 获取字符的 Unicode 码点
     *
     * @param string $char 单个字符
     * @return int Unicode 码点
     */
    private static function unicodeOrd($char)
    {
        $ord = ord($char[0]);
        if ($ord < 128) {
            return $ord;
        }

        $bytes = strlen($char);
        $result = $ord & (0xFF >> ($bytes + 1));
        for ($i = 1; $i < $bytes; $i++) {
            $result = ($result << 6) | (ord($char[$i]) & 0x3F);
        }

        return $result;
    }}// 示例用法$input = '中文测试 & 特殊符号:<>&"';// 编码$encoded = HtmlEntityConverter::encode($input);echo "编码后的字符串: " . $encoded . "\n";// 解码$decoded = HtmlEntityConverter::decode($encoded);echo "解码后的字符串: " . $decoded . "\n";?>

代码说明

  1. encode() 方法

    • 遍历输入字符串的每个字符。

    • 如果是 ASCII 字符,直接保留。

    • 如果是非 ASCII 字符,将其转换为 HTML 实体编号(如 &#20013;)。

  2. decode() 方法

    • 使用 html_entity_decode() 函数将 HTML 实体编号转换为原始字符。

  3. unicodeOrd() 方法

    • 获取字符的 Unicode 码点,用于生成 HTML 实体编号。


示例输出

plaintext
复制
编码后的字符串: &#20013;&#25991;&#27979;&#35797; & &#29305;&#27530;&#31526;&#21495;:&lt;&gt;&amp;&quot;
解码后的字符串: 中文测试 & 特殊符号:<>&"

支持的功能

  1. 支持多字节字符

    • 使用 mb_* 函数处理多字节字符(如中文、日文等)。

  2. 保留 ASCII 字符

    • ASCII 字符(如字母、数字、标点符号)不会被转换。

  3. 支持特殊符号

    • 特殊符号(如 <>&")会被正确编码和解码。


注意事项

  1. 字符编码

    • 确保输入字符串的编码是 UTF-8,否则可能导致转换错误。

  2. 性能问题

    • 对于非常大的字符串,遍历每个字符可能会影响性能。可以考虑优化算法或使用内置函数。

  3. 安全性

    • 在输出到 HTML 页面时,建议使用 htmlspecialchars() 函数防止 XSS 攻击。


扩展功能

如果需要更复杂的功能(如只转换特定字符、支持更多编码等),可以扩展该类。例如:

php
复制
public static function encodeSpecific($input, $charsToEncode){
    $encoded = '';
    $length = mb_strlen($input, 'UTF-8');

    for ($i = 0; $i < $length; $i++) {
        $char = mb_substr($input, $i, 1, 'UTF-8');
        if (in_array($char, $charsToEncode)) {
            $encoded .= '&#' . self::unicodeOrd($char) . ';';
        } else {
            $encoded .= $char;
        }
    }

    return $encoded;}

总结

通过以上实现,可以轻松地在 PHP 中实现 HTML 实体编号与非 ASCII 字符串之间的相互转换。根据实际需求,可以进一步扩展和优化代码。




希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部