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

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

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

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

在 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 字符串之间的相互转换。根据实际需求,可以进一步扩展和优化代码。



本文关键词: php 实现 HTML 实体 编号 ASCII

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

相关推荐

扫码关注

qrcode

QQ交谈

回顶部