<!-- review: finished -->

<a id="external-set-misc"></a>

# Set-Misc

`set-misc` 模块通过添加对 URI 转义和反转义、JSON 引号处理以及各种编码和解码方法（HEX、MD5、SHA1、Base32、Base64）和其他操作的支持，扩展了 Rewrite 模块的标准功能。

它可以解决以下任务：

- **URI 处理**：转义和反转义 URI。
- **编码和解码**：支持 HEX、MD5、SHA1、Base32、Base64。
- **附加功能**：处理 JSON 引号和其他实用功能。

<a id="installation-25"></a>

## 安装

要 [安装](https://cn.angie.software//angie/docs/installation/index.md#install-packages) 该模块，请使用以下软件包之一：

- Angie：`angie-module-set-misc`
- Angie PRO：`angie-pro-module-set-misc`

<a id="loading-the-module-25"></a>

## 加载模块

要使用该模块，必须在 `main{}` 上下文中加载它。下面的示例还使用了来自 [echo](https://cn.angie.software//angie/docs/installation/external-modules/echo.md#external-echo) 模块的指令：

```nginx
load_module modules/ndk_http_module.so;
load_module modules/ngx_http_set_misc_module.so;
load_module modules/ngx_http_echo_module.so;
```

<a id="configuration-example-99"></a>

## 配置示例

```nginx
server {
    listen 80;
    server_name localhost;

    location /ifempty {
        set $a $arg_a;
        set_if_empty $a 56;

        echo "arg_a = '$arg_a'";
        echo "a = '$a'";
    }

    location /unescape {
        set_unescape_uri $a $arg_a;
        set_escape_uri $b $a;

        echo "arg_a = '$arg_a'";
        echo "a = '$a'";
        echo "b = '$b'";
    }

    location /base32 {
        set_encode_base32 $a $arg_a;
        set_decode_base32 $b $a;

        echo "arg_a = '$arg_a'";
        echo "a = '$a'";
        echo "b = '$b'";
    }

    location /hex {
        set_encode_hex $a $arg_a;
        set_decode_hex $b $a;

        echo "arg_a = '$arg_a'";
        echo "a = '$a'";
        echo "b = '$b'";
    }
}
```

<a id="demonstration-2"></a>

## 演示

```console
$ curl localhost/ifempty/?a=100

  arg_a = '100'
  a = '100'

$ curl localhost/ifempty

  arg_a = ''
  a = '56'

$ curl localhost/unescape/?a=Hello%20world!

  arg_a = 'Hello%20world!'
  a = 'Hello world!'
  b = 'Hello%20world!'

$ curl localhost/base32/?a=abcde

  arg_a = 'abcde'
  a = 'c5h66p35'
  b = 'abcde'

$ curl localhost/hex/?a=abcde

  arg_a = 'abcde'
  a = '6162636465'
  b = 'abcde'
```

<a id="additional-information-26"></a>

## 附加信息

指令的完整说明和源代码可在以下位置获取：
[https://github.com/openresty/set-misc-nginx-module](https://github.com/openresty/set-misc-nginx-module).
