SQL 将URL编码转汉字!

原文:SQL 将URL编码转汉字!

-- =============================================
-- 作    者: ruijc
-- 描    述: 将Url编码转明文字符串
-- =============================================
CREATE FUNCTION FN_URLDecode
(
 @Str VARCHAR(8000)--已经编码的字符串
)
RETURNS VARCHAR(8000)
AS
BEGIN
  DECLARE @Position  INT;          --'%'字符所在位置
  DECLARE @Chr       CHAR(16);     --字符常量
  DECLARE @Pattern   CHAR(21);
  DECLARE @ParseStr  VARCHAR(8000);--解码后的字符串
  DECLARE @Hex		 UNIQUEIDENTIFIER;--定义16进制模板,因为GUID方便转为BYTE
  DECLARE @CurrWord	 INT		;--当前字
  DECLARE @BitsCount INT        ;--当前解码位数
  DECLARE @HightByte TINYINT;--高位字节
  DECLARE @LowByte   TINYINT;--低位字节

  /****************变量初始化***********************/
  SET     @Chr = '0123456789abcdef';
  SET     @Pattern = '%[%][a-f0-9][a-f0-9]%';
  SET     @ParseStr=@Str;
  SET     @Hex= '00000000-0000-0000-0000-000000000000';
  SET     @CurrWord=0;
  SET     @BitsCount=0;
  SET     @HightByte=0;
  SET     @LowByte=0;

  IF (@Str IS NOT NULL OR @Str<>'')
   BEGIN
     SET    @Position = PATINDEX(@Pattern, @ParseStr);--取得第一个'%'所在的位置
     WHILE @Position>0
      BEGIN
        SET @Hex=STUFF(@Hex,7,2,LEFT(RIGHT(@ParseStr,len(@ParseStr) - @Position),2));
        SET @HightByte=CAST(CAST(@Hex AS BINARY(1)) AS INT);

        IF (@HightByte & 127=@HightByte)
         BEGIN--ASCII码直接转为UTF-8或UTF-16
           SET @CurrWord=@HightByte;
           SET @BitsCount=1;
         END

        IF (@HightByte & 192=192)
         BEGIN--Unicode编码
           SET @CurrWord=@HightByte & 31 ;
           SET @BitsCount=2;
         END

        IF (@HightByte & 224=224)
         BEGIN--UTF-8编码
			SET	@CurrWord = @HightByte & 15
			SET @BitsCount = 3
         END

        IF (@HightByte & 240=240)
         BEGIN--UTF-16编码
			SET	@CurrWord = @HightByte & 7
			SET @BitsCount = 4
         END

        DECLARE @Index INT;
        DECLARE @NEWCHAR NVARCHAR(2);
        SET @Index=1;
        SET @NEWCHAR='';
        WHILE @Index<@BitsCount
         BEGIN
              IF (LEN(@ParseStr)-@Position-3*@Index)<0
               BEGIN
                   SET @ParseStr=@Str ;
                   SET @Position=0;
                   BREAK;
               END
			SET @NEWCHAR = LEFT(RIGHT(@ParseStr,LEN(@ParseStr) - @Position - 3* @Index),2);
            --如果没有16进制编码则中断外层WHILE
			IF @NEWCHAR NOT LIKE '[a-f0-9][a-f0-9]'
			 BEGIN
				SET @ParseStr = @Str
				SET @Position=0;--中断外层WHILE
				BREAK;
			 END 	

			SET @Hex = STUFF(@Hex, 7, 2, @NEWCHAR)		

			SET @LowByte = CAST(CAST(@Hex AS BINARY(1)) AS INT);

			IF @LowByte&192=192
			BEGIN
				SET @ParseStr = @Str
				SET @Position=0;--中断外层WHILE
				BREAK;
			END 

			SET @CurrWord = (@CurrWord * 64) | (@LowByte & 63)
			SET @Index =@Index+ 1
         END                                   

		 IF @BitsCount > 1
          SET @ParseStr = STUFF(@ParseStr, @Position, 3*(@BitsCount), NCHAR(@CurrWord))
		 ELSE
		  BEGIN
			set @ParseStr = STUFF(@ParseStr, @Position, 2, NCHAR(@CurrWord))
			set @ParseStr = STUFF(@ParseStr, @Position+1, 1, N'')
		  END
		----取得下一个'%'所在的位置
        SET  @Position = PATINDEX(@Pattern, @ParseStr);
      END
   END
   RETURN @ParseStr;
END

GO
SELECT dbo.FN_URLDecode('%E4%BD%A0%E6%98%AF%E5%93%AA%E4%B8%AA')
时间: 2024-11-01 03:40:38

SQL 将URL编码转汉字!的相关文章

如何用excel urldecode解码把url编码转为汉字?

统计分析可以反映出网站运营的情况,并根据实际作出相应的调整,是站长必需的基础技能.ytkah感觉最好用的是谷歌统计,里面有个搜索关键词及对应受访页面,这个功能对优化用处很大,但大家都知道访问不太顺畅.statcounter也有相似的功能,但免费版只能显示最近几天或最近几百条的记录.bd统计.cnzz也有类似的功能,只是不太明显,没注意的话可能发现不到,没错,就是访问明细那.最相关的文章:如何从统计中批量获取BD搜索关键词及对应的入口页面? 以上是cnzz的截图,只能显示最近7天的数据,可以每周下

URL编码与SQL注射

编码|编码 说到url编码,你或许会想起N年前的url编码漏洞.可惜我是"生不逢时"啊,我接触网络时,那个漏洞早就绝迹咯.  言归正传,URL 编码是什么东东呢?看看我从网上抄的定义:  引用: url编码是一种浏览器用来打包表单输入的格式.浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或者分离地发给服务器.不管哪种情况, 在服务器端的表单输入格式样子象这样:  theName=Ichab

ASP技巧:URL编码与SQL注入

sql|编码|技巧 说到url编码,你或许会想起N年前的url编码漏洞.可惜我是"生不逢时"啊,我接触网络时,那个漏洞早就绝迹咯. 言归正传,URL 编码是什么东东呢?看看我从网上抄的定义: 引用: url编码是一种浏览器用来打包表单输入的格式.浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或者分离地发给服务器.不管哪种情况, 在服务器端的表单输入格式样子象这样: theName=Icha

在Linux Shell下将汉字转换为Url编码

在linux 的shell环境下有一个od命令可以将文件按不同的进制的ascii码输 出,该功能可以完成在linux shell下将汉字转换为url编码的任务. url编码是十六进制的形如%E6%9C%8D%E5%8A%A1%E5的字符串,test是包含 "数据库网络,"这几个字符的文件,以下命令输出: #od -t x /test 0000000 ddbefdca f8cde2bf 0a2ce7c2 0000014 该字符串对应的url编码为 %CA%FD%BE%DD%BF%E2%C

如何把html网页中出现的 带汉字和标点符号的链接自动转码为url编码

问题描述 如何把html网页中出现的 带汉字和标点符号的链接自动转码为url编码 因为网页是html的,无法直接执行php. 最好是通过js对链接中的汉字和标点符号处理, 点击链接的时候,浏览器能够解析打开.谢谢各位老师 解决方案 什么语言没有说.自己google 你用的语言+urlencode 就有答案

Asp.net对url编码的转化

今天突然遇到一个棘手的问题,就是对于url编码的转换. 大家上网的时候经常可以发现我们输入的汉字在url传输的时候是%xx%xx的形式. 如果我们需要提取上面的信息该怎么办呢?如果是通过类似index.aspx?name=%xx%xx还可以通过request取得值.所以不用管那么多.可是如果这些字符包含在一个地址里面,而不是参数,怎么办? 用Uri.UnescapeDataString()函数转化 后可以得到正确的中文编码. string ss = "%e9%ab%98%e6%b8%85%e6%

js和php对url编码的处理方法

 这篇文章主要介绍了关于js和php对url编码的处理方法,需要的朋友可以参考下 解决办法: 采用js对URL中的汉字进行escape编码.    代码如下: <a href="" onclick="window.open('product_list.php?p_sort='+escape('PHP开发资源网'));">   这样点击链接后的效时:    引用:http://127.0.0.1/shop/product_list.php?p_sort=P

URL原理、URL编码、URL特殊字符

From: http://blog.csdn.net/chenlycly/article/details/51820727 From: http://blog.csdn.net/zmx729618/article/details/51381655 From: http://www.cnblogs.com/coco1s/p/5038412.html 通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字

关于URL编码

一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址"http://www.abc.com",但是没有希腊字母的网址"http://www.aβγ.com"(读作阿尔法-贝塔-伽玛.com).这是因为网络标准RFC 1738做了硬性规定: "...Only alphanumerics [0-9a-zA-Z], the special cha