六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 2614|回复: 0

实现MySQL版的urlencode与urldecode

[复制链接]
 楼主| 发表于 2013-4-9 13:54:58 | 显示全部楼层 |阅读模式
实现MySQL版的urlencode与urldecode
直接将以下代码在mysql里面执行一下,就可以直接使用函数了
使用函数示例如下:select urlencode('http://bbs.agoit.com');
  1. DELIMITER ;

  2. DROP FUNCTION IF EXISTS urlencode;

  3. DELIMITER |

  4. CREATE FUNCTION urlencode (s VARCHAR(4096)) RETURNS VARCHAR(4096)
  5. DETERMINISTIC
  6. CONTAINS SQL
  7. BEGIN
  8.        DECLARE c VARCHAR(4096) DEFAULT '';
  9.        DECLARE pointer INT DEFAULT 1;
  10.        DECLARE s2 VARCHAR(4096) DEFAULT '';

  11.        IF ISNULL(s) THEN
  12.            RETURN NULL;
  13.        ELSE
  14.        SET s2 = '';
  15.        WHILE pointer <= length(s) DO
  16.           SET c = MID(s,pointer,1);
  17.           IF c = ' ' THEN
  18.              SET c = '+';
  19.           ELSEIF NOT (ASCII(c) BETWEEN 48 AND 57 OR
  20.                 ASCII(c) BETWEEN 65 AND 90 OR
  21.                 ASCII(c) BETWEEN 97 AND 122) THEN
  22.              SET c = concat("%",LPAD(CONV(ASCII(c),10,16),2,0));
  23.           END IF;
  24.           SET s2 = CONCAT(s2,c);
  25.           SET pointer = pointer + 1;
  26.        END while;
  27.        END IF;
  28.        RETURN s2;
  29. END;

  30. |

  31. DELIMITER ;
复制代码
  1. DROP FUNCTION IF EXISTS urldecode;

  2. DELIMITER |

  3. CREATE FUNCTION urldecode (s VARCHAR(4096)) RETURNS VARCHAR(4096)
  4. DETERMINISTIC
  5. CONTAINS SQL
  6. BEGIN
  7.        DECLARE c VARCHAR(4096) DEFAULT '';
  8.        DECLARE pointer INT DEFAULT 1;
  9.        DECLARE h CHAR(2);
  10.        DECLARE h1 CHAR(1);
  11.        DECLARE h2 CHAR(1);
  12.        DECLARE s2 VARCHAR(4096) DEFAULT '';

  13.        IF ISNULL(s) THEN
  14.           RETURN NULL;
  15.        ELSE
  16.        SET s2 = '';
  17.        WHILE pointer <= LENGTH(s) DO
  18.           SET c = MID(s,pointer,1);
  19.           IF c = '+' THEN
  20.              SET c = ' ';
  21.           ELSEIF c = '%' AND pointer + 2 <= LENGTH(s) THEN
  22.              SET h1 = LOWER(MID(s,pointer+1,1));
  23.              SET h2 = LOWER(MID(s,pointer+2,1));
  24.              IF (h1 BETWEEN '0' AND '9' OR h1 BETWEEN 'a' AND 'f')
  25.                  AND
  26.                  (h2 BETWEEN '0' AND '9' OR h2 BETWEEN 'a' AND 'f')
  27.                  THEN
  28.                    SET h = CONCAT(h1,h2);
  29.                    SET pointer = pointer + 2;
  30.                    SET c = CHAR(CONV(h,16,10));
  31.               END IF;
  32.           END IF;
  33.           SET s2 = CONCAT(s2,c);
  34.           SET pointer = pointer + 1;
  35.        END while;
  36.        END IF;
  37.        RETURN s2;
  38. END;

  39. |

  40. DELIMITER ;
复制代码
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表