diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c
index 3b392f7..1fff16f 100644
--- a/src/core/ngx_string.c
+++ b/src/core/ngx_string.c
@@ -1350,7 +1350,7 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
         0xffffffff, /* 1111 1111 1111 1111  1111 1111 1111 1111 */
 
                     /* ?>=< ;:98 7654 3210  /.-, +*)( '&%$ #"!  */
-        0x80000029, /* 1000 0000 0000 0000  0000 0000 0010 1001 */
+        0x80000829, /* 1000 0000 0000 0000  0000 1000 0010 1001 */
 
                     /* _^]\ [ZYX WVUT SRQP  ONML KJIH GFED CBA@ */
         0x00000000, /* 0000 0000 0000 0000  0000 0000 0000 0000 */
@@ -1540,6 +1540,10 @@ ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type)
                 break;
             }
 
+			if (ch == '+') {
+				ch = 0x20;
+			}
+
             *d++ = ch;
             break;
 
