#!/usr/bin/env python

"""
Copyright (c) 2006-2024 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re

from lib.core.enums import PRIORITY  # 从核心库导入优先级枚举

# 设置优先级为低
__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    这个函数用于篡改（tamper）输入的payload，将所有非字母数字字符转换为HTML实体编码（使用代码点）。

    参数：
        payload：要篡改的原始payload。
        **kwargs：其他可选参数（在本函数中未使用）。

    功能：
        - 遍历payload中的每个字符，并将非字母数字字符转换为其对应的HTML实体形式。

    示例：
        >>> tamper("1' AND SLEEP(5)#")
        '1&#39;&#32;AND&#32;SLEEP&#40;5&#41;&#35;'
        >>> tamper("1&#39;&#32;AND&#32;SLEEP&#40;5&#41;&#35;")
        '1&#39;&#32;AND&#32;SLEEP&#40;5&#41;&#35;'
    """

    if payload:  # 如果payload不为空
        # 替换已经编码的HTML实体
        payload = re.sub(r"&#(\d+);", lambda match: chr(int(match.group(1))), payload)      # NOTE: https://github.com/sqlmapproject/sqlmap/issues/5203
        # 将非字母数字字符转换为HTML实体编码
        payload = re.sub(r"[^\w]", lambda match: "&#%d;" % ord(match.group(0)), payload)

    return payload
