01.
DELIMITER
02.
03.
DROP FUNCTION IF EXISTS urlencode
04.
05.
DELIMITER |
06.
07.
CREATE FUNCTION urlencode (s VARCHAR(4096)) RETURNS VARCHAR(4096)08.
DETERMINISTIC
09.
CONTAINS SQL
10.
BEGIN
11.
DECLARE c VARCHAR(4096) DEFAULT ''
12.
DECLARE pointer INT DEFAULT 1
13.
DECLARE s2 VARCHAR(4096) DEFAULT ''
14.
15.
IF ISNULL(s) THEN
16.
RETURN NULL
17.
ELSE
18.
SET s2 = ''
19.
WHILE pointer <= length(s) DO
20.
SET c = MID(s,pointer,1)
21.
IF c = ' ' THEN
22.
SET c = '+'
23.
ELSEIF NOT (ASCII(c) BETWEEN 48 AND 57 OR24.
ASCII(c) BETWEEN 65 AND 90 OR
25.
ASCII(c) BETWEEN 97 AND 122) THEN
26.
SET c = concat("%",LPAD(CONV(ASCII(c),10,16),2,0))27.
END IF
28.
SET s2 = CONCAT(s2,c)
29.
SET pointer = pointer + 1
30.
END while
31.
END IF
32.
RETURN s2
33.
END
34.
|
35.
DELIMITER
view sourceprint?
01.
DROP FUNCTION IF EXISTS urldecode
02.
03.
DELIMITER |
04.
05.
CREATE FUNCTION urldecode (s VARCHAR(4096)) RETURNS VARCHAR(4096)06.
DETERMINISTIC
07.
CONTAINS SQL
08.
BEGIN
09.
DECLARE c VARCHAR(4096) DEFAULT ''
10.
DECLARE pointer INT DEFAULT 1
11.
DECLARE h CHAR(2)
12.
DECLARE h1 CHAR(1)
13.
DECLARE h2 CHAR(1)
14.
DECLARE s2 VARCHAR(4096) DEFAULT ''
15.
16.
IF ISNULL(s) THEN
17.
RETURN NULL
18.
ELSE
19.
SET s2 = ''
20.
WHILE pointer <= LENGTH(s) DO
21.
SET c = MID(s,pointer,1)
22.
IF c = '+' THEN
23.
SET c = ' '
24.
ELSEIF c = '%' AND pointer + 2 <= LENGTH(s) THEN25.
SET h1 = LOWER(MID(s,pointer+1,1))
26.
SET h2 = LOWER(MID(s,pointer+2,1))
27.
IF (h1 BETWEEN '0' AND '9' OR h1 BETWEEN 'a' AND 'f')28.
AND
29.
(h2 BETWEEN '0' AND '9' OR h2 BETWEEN 'a' AND 'f')30.
THEN
31.
SET h = CONCAT(h1,h2)
32.
SET pointer = pointer + 2
33.
SET c = CHAR(CONV(h,16,10))
34.
END IF
35.
END IF
36.
SET s2 = CONCAT(s2,c)
37.
SET pointer = pointer + 1
38.
END while
39.
END IF
40.
RETURN s2
41.
END
42.
43.
|
44.
45.
DELIMITER
当一个字符串经过多次 urlencode 处理之后,可以使用 multiurldecode来解码,它将多次调用 urldecode来解码,直到没有需要解码的字符www.it165.net
view sourceprint?
01.
DELIMITER
02.
03.
DROP FUNCTION IF EXISTS multiurldecode
04.
05.
DELIMITER |
06.
07.
CREATE FUNCTION multiurldecode (s VARCHAR(4096)) RETURNS VARCHAR(4096)08.
DETERMINISTIC
09.
CONTAINS SQL
10.
BEGIN
11.
DECLARE pr VARCHAR(4096) DEFAULT ''
12.
IF ISNULL(s) THEN
13.
RETURN NULL
14.
END IF
15.
REPEAT
16.
SET pr = s
17.
SELECT urldecode(s) INTO s
18.
UNTIL pr = s END REPEAT
19.
RETURN s
20.
END
21.
22.
|
23.
24.
DELIMITER
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)