| 
                
                    | 
                            
                                | Author | Topic |  
                                    | SwePesoPatron Saint of Lost Yaks
 
 
                                        30421 Posts | 
                                            
                                            |  Posted - 2007-09-05 : 15:11:27 
 |  
                                            | [code]CREATE FUNCTION dbo.fnDeURL(	@URL VARCHAR(8000))RETURNS VARCHAR(8000)ASBEGIN	DECLARE @Position INT,		@Base CHAR(16),		@High TINYINT,		@Low TINYINT,		@Pattern CHAR(21)	SELECT	@Base = '0123456789abcdef',		@Pattern = '%[%][0-9a-f][0-9a-f]%',		@Position = PATINDEX(@Pattern, @URL)	WHILE @Position > 0		SELECT	@High = CHARINDEX(SUBSTRING(@URL, @Position + 1, 1), @Base),			@Low = CHARINDEX(SUBSTRING(@URL, @Position + 2, 1), @Base),			@URL = STUFF(@URL, @Position, 3, CHAR(16 * @High + @Low - 17)),			@Position = PATINDEX(@Pattern, @URL)	RETURN	REPLACE(@URL, '+', ' ')END[/code] E 12°55'05.25"N 56°04'39.16"EDIT: Decoding + as Jeff mentioned
 |  |  
                                    | jsmith8858Dr. Cross Join
 
 
                                    7423 Posts | 
                                        
                                          |  Posted - 2007-09-05 : 15:59:29 
 |  
                                          | Your subject says "URL Encoding" but the function does "URL Decoding".Looks good, nice and short!  FYI -- URL Decoding should also decode + to a space.- Jeffhttp://weblogs.sqlteam.com/JeffS |  
                                          |  |  |  
                                    | jsmith8858Dr. Cross Join
 
 
                                    7423 Posts |  |  
                                    | SwePesoPatron Saint of Lost Yaks
 
 
                                    30421 Posts | 
                                        
                                          |  Posted - 2007-09-05 : 16:13:22 
 |  
                                          | Thank you.Now both + and %20 returns a single space. E 12°55'05.25"N 56°04'39.16"
 |  
                                          |  |  |  
                                    | KristenTest
 
 
                                    22859 Posts | 
                                        
                                          |  Posted - 2007-09-06 : 05:54:08 
 |  
                                          | Here's my rather crappy EncodeURL function CREATE FUNCTION dbo.fnEncodeURL(	@strInput	varchar(8000)	-- Note: String will get longer, so may overrun 8,000 characters)RETURNS varchar(8000)/* WITH ENCRYPTION */AS/* * fnEncodeURL	Encode value to be used as URL (i.e. substitute reserved characters with %nn) * *	SELECT dbo.fnEncodeURL(MyColumnToURLEncode) * * Returns: * *	Encoded Content  * * HISTORY: * * 19-Jun-2004 KBM  Started */BEGIN	IF @strInput IS NULL	BEGIN		-- Just return NULL if input string IS NULL		RETURN NULL	END	SELECT @strInput=			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(					@strInput,			    			'%', '%25'),	-- Must be inner-most replace						CHAR(10), '%0A'),						CHAR(13), '%0D'),	      					' ', '%20'),			    			':', '%3A'),			    			';', '%3B'),			    			'-', '%2D'),			    			'/', '%2F'),			    			'\', '%5C'),			    			'!', '%21'),			    			'"', '%22'),			    			'#', '%23'),			    			'?', '%3F'),			    			'=', '%3D'),			    			'@', '%40'),--			    			Kristen'%', '%25'),'>', '%3E'),			    			'<', '%3C'),			    			'$', '%24'),			    			'&', '%26'),			    			'[', '%5B'),			    			']', '%5D'),			    			'~', '%7E'),			    			'^', '%5E'),			    			'`', '%60'),			    			'{', '%7B'),			    			'}', '%7D'),			    			'|', '%7C')	RETURN @strInputEND/* TEST RIG-- Code Example	SELECT dbo.fnEncodeURL('8ECEE9BE-05BD-4DD2-9D09-6C121E0924E7') */--================== fnEncodeURL ==================--GO |  
                                          |  |  |  
                                    | SwePesoPatron Saint of Lost Yaks
 
 
                                    30421 Posts | 
                                        
                                          |  Posted - 2007-09-06 : 07:17:39 
 |  
                                          | I think you need % for the inner most REPLACE  SELECT dbo.fnEncodeURL('Peso:Kristen') returns "Peso%253AKristen" ALTER FUNCTION dbo.fnEncodeURL(	@strInput	varchar(8000))RETURNS varchar(8000)ASBEGIN	RETURN			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(			REPLACE(REPLACE(					@strInput,			    			'%', '%25'),						CHAR(10), '%0A'),						CHAR(13), '%0D'),	      					' ', '%20'),			    			':', '%3A'),			    			';', '%3B'),			    			'-', '%2D'),			    			'/', '%2F'),			    			'\', '%5C'),			    			'!', '%21'),			    			'"', '%22'),			    			'#', '%23'),			    			'?', '%3F'),			    			'=', '%3D'),			    			'@', '%40'),			    			'>', '%3E'),			    			'<', '%3C'),			    			'$', '%24'),			    			'&', '%26'),			    			'[', '%5B'),			    			']', '%5D'),			    			'~', '%7E'),			    			'^', '%5E'),			    			'`', '%60'),			    			'{', '%7B'),			    			'}', '%7D'),			    			'|', '%7C')ENDNow SELECT dbo.fnEncodeURL('Peso:Kristen') returns "Peso%3AKristen"E 12°55'05.25"N 56°04'39.16"
 |  
                                          |  |  |  
                                    | KristenTest
 
 
                                    22859 Posts | 
                                        
                                          |  Posted - 2007-09-06 : 09:57:04 
 |  
                                          | "I think you need % for the inner most REPLACE"Yeah, you would be right.    I'm please to report that the QA Tester for that routine was shot at dawn!   |  
                                          |  |  |  
                                    | jsmith8858Dr. Cross Join
 
 
                                    7423 Posts | 
                                        
                                          |  Posted - 2007-09-06 : 10:19:03 
 |  
                                          | Hey Peso -- Just noticed that you did your REPLACE too late for the + to SPACE. %2B is the plus sign, but if you run:select dbo.fnDeURL('jeff%2Bsmith')instead of jeff+smithyou get:jeff smith- Jeffhttp://weblogs.sqlteam.com/JeffS |  
                                          |  |  |  
                                    | KristenTest
 
 
                                    22859 Posts | 
                                        
                                          |  Posted - 2007-09-06 : 10:27:08 
 |  
                                          | Hahaha .. the boot's on the other foot!Kristen |  
                                          |  |  |  
                                    | SwePesoPatron Saint of Lost Yaks
 
 
                                    30421 Posts | 
                                        
                                          |  Posted - 2007-09-07 : 08:12:03 
 |  
                                          | [code]CREATE FUNCTION dbo.fnDeURL(	@URL VARCHAR(8000))RETURNS VARCHAR(8000)ASBEGIN	DECLARE @Position INT,		@Base CHAR(16),		@High TINYINT,		@Low TINYINT,		@Pattern CHAR(21)	SELECT	@Base = '0123456789abcdef',		@Pattern = '%[%][0-9a-f][0-9a-f]%',		@URL = REPLACE(@URL, '+', ' '),		@Position = PATINDEX(@Pattern, @URL)	WHILE @Position > 0		SELECT	@High = CHARINDEX(SUBSTRING(@URL, @Position + 1, 1), @Base),			@Low = CHARINDEX(SUBSTRING(@URL, @Position + 2, 1), @Base),			@URL = STUFF(@URL, @Position, 3, CHAR(16 * @High + @Low - 17)),			@Position = PATINDEX(@Pattern, @URL)		RETURN	@URLEND[/code] E 12°55'05.25"N 56°04'39.16"
 |  
                                          |  |  |  
                                |  |  |  |