Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 235
  • Last Modified:

URL displaying %20 for spaces

In IE browser and some other browsers The URL is dispaying "%20" for spaces.

Passing date, month and headline in a query string (attached code).

In the headline text, it strips the space and replaces it with %20. Why so??Any help

How can I fix this thing.

Would appreciate any help!

 

Thanks!
private void RenderRelease(HtmlTextWriter xwriter, PressRelease release) {
			if (xwriter == null) {
				throw new ArgumentNullException("xwriter");
			}
 
			if (release == null) {
				throw new ArgumentNullException("release");
			}
 
			xwriter.RenderBeginTag(HtmlTextWriterTag.Li);
 
			parms[0] = release.Dateline.Year.ToString(cc);
			parms[1] = release.Dateline.ToString("MMMM",cc);
			parms[2] = release.Headline;
 
			HyperLink link = new HyperLink();
			link.NavigateUrl = FormatHyperlink(PageConstants.PagePressReleaseDetail, false, parms);
			link.Text = release.Headline;
			link.CssClass = "pressRelease";
			link.RenderControl(xwriter);
 
			xwriter.AddAttribute(HtmlTextWriterAttribute.Class, "date");
			xwriter.RenderBeginTag(HtmlTextWriterTag.Span);
			xwriter.WriteEncodedText(String.format(NewsDateForamtString, release.Dateline));
			xwriter.RenderEndTag();		// span
 
			xwriter.RenderEndTag();		// li
		}

Open in new window

0
newaspdotnet
Asked:
newaspdotnet
  • 4
  • 3
1 Solution
 
burakiewiczCommented:
that is the html encoding for a space

to set the text use this
headline.Text=HttpUtility.HtmlDecode(strHeadline)
0
 
MidnightOneCommented:
URLs cannot contain spaces, and therefore puts int he hexadecimal code for space %20 (32 decimal).
0
 
newaspdotnetAuthor Commented:
I changed this line of code.

parms[2] = HttpUtility.HtmlDecode(release.Headline);

link.NavigateUrl = FormatHyperlink(PageConstants.PagePressReleaseDetail, false, parms);


Passing this link url as query string.
But this didnt help!

Am I doing this right?
0
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 
burakiewiczCommented:
you need to change it where you set the text or if you have a setter.
You will need to decode it before you use it as text
release.Headline=HttpUtility.HtmlDecode(release.Headline);

or
HyperLink link = new HyperLink();
link.NavigateUrl = FormatHyperlink(PageConstants.PagePressReleaseDetail, false, parms);
link.Text = HttpUtility.HtmlDecode(release.Headline);
link.CssClass = "pressRelease";
link.RenderControl(xwriter);
0
 
burakiewiczCommented:
the navigate url will always have  %20 for a space
0
 
newaspdotnetAuthor Commented:
Thanks alot for your help dear!

But I tried doing it both ways you mentioned.

It still gives %20 in the url. :(

Any other way I can try to work this out???


URLSPACE.jpg
0
 
newaspdotnetAuthor Commented:
Hey we are already using this in format hyperlink method!!!!!!
My bad I didnt debug it properly earlier.

But now if we are already using "HttpUtility.UrlEncode(argList[i])" then this problem should not be there.

Would really appreciate any help!

public static string FormatHyperlink(string destination, bool useQueryStringParams, params string[] args)
		{
			if (StringHelper.IsNullEmptyOrSpaces(destination))
			{
				throw new ArgumentNullException(destination);
			}
 
			Page p = HttpContext.Current.CurrentHandler as Page;
			if (p != null)
			{
				destination = p.ResolveUrl(destination);
			}
 
			System.Text.StringBuilder result = new System.Text.StringBuilder(destination);
 
			System.Collections.Specialized.StringCollection argList = new System.Collections.Specialized.StringCollection();
			argList.AddRange(args);
			if (useQueryStringParams)
			{
				result.Append("?");
				if (argList.Count % 2 != 0)
				{
					throw new ArgumentOutOfRangeException("args");
				}
 
				for (int i = 0; i < argList.Count - 1; i = i + 2)
				{
					result.AppendFormat("{0}={1}&", HttpUtility.UrlEncode(argList[i]), HttpUtility.UrlEncode(argList[i + 1]));
				}
				result.Remove(result.Length - 1, 1);
			}
			else
			{
				for (int i = 0; i < argList.Count; i++)
				{
					result.AppendFormat("/{0}", HttpUtility.HtmlEncode(argList[i]));
				}
			}
 
			return result.ToString();
		}

Open in new window

0
 
newaspdotnetAuthor Commented:

I just changed the following line: result.AppendFormat("/{0}", HttpUtility.HtmlEncode(argList[i]));

TO:

for (int i = 0; i < argList.Count; i++)
                {
                    result.AppendFormat("/{0}", HttpUtility.UrlEncode(argList[i]));
                }

Instead of HtmlEncode I used UrlEncode. It changes %20 to '+' but now I get following error when I click on the hyperlink control....

Did I do something wrong???

Description: The request filtering module is configured to deny a request that contains a double escape sequence.
0

Featured Post

Veeam and MySQL: How to Perform Backup & Recovery

MySQL and the MariaDB variant are among the most used databases in Linux environments, and many critical applications support their data on them. Watch this recorded webinar to find out how Veeam Backup & Replication allows you to get consistent backups of MySQL databases.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now