470,563 Members | 2,164 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,563 developers. It's quick & easy.

Problems generating valid XHTML


I am having difficulty getting the ASP.NET framework to generate valid
XHTML. My immediate problem surrounds user input in, for example, textbox

I consider characters such as less-than and ampersand perfectly valid in
user input. So I've disabled request validation by adding the following to my
web.config file.

<pages validateRequest="false" />

I have a simple page with an ASP.NET textbox and a submit button. I enter
the following test string the textbox control.

x < y && x > 0

I submit the page and allow it to simply re-render, which generates the
following HTML.

<input name="TextBox1" type="text" value="x < y &amp;& x > 0" id="TextBox1" />

This is not valid XHTML: the less-than and greater-than characters need to
be escaped.

Why is the framework escaping the ampersand but not the less-than and
greater-than characters?

I have tried to work around this by deriving from HtmlTextWriter and
overriding various methods so that I can HttpUtility.HtmlEncode() attribute
values, but the ampersand escaping appears to be hardcoded into the base
HtmlTextWriter: I always end up with double-escaping of the ampersands. e.g.
I get:

<input value="&lt;" />

instead of what I want, which is

<input value="<" />

Futher, because the HtmlTextWriter allows control authors to generate
whatever output they want via calls to Write(string), I don't think I can
have any control over the generated HTML at all. For example, I can do the
following in a custom control.

protected override void Render(HtmlTextWriter writer)
writer.Write("<input value=\"");
writer.Write("whatever I want & < in here");
writer.Write("\" >");

So the HtmlTextWriter has absolutely no idea whether I'm hacking together an
element, attribute or what.

I'm left wondering if the only way I can get valid XHTML is to override
every single Render() method of every control I want to use!? In which case
I'm losing just about all of the benefit of using built-in / 3rd-party
controls in the first place. Can anyone see a better way?

- Lee

Nov 19 '05 #1
4 1480

There are some escaping problems with my original post.

The HTML generated is:

value="X LT y ANDAND x GT y"

where the tokens LT, GT and AND represent single less-than, greater-than and
ampersand characters.

Likewise, using HtmlEncode() generates


instead of


- Lee

Nov 19 '05 #2

Sorry, one more time:

The HTML generated is:

value="x LT y ANDamp;ANDamp; x GT y"


- Lee
Nov 19 '05 #3
Hi Lee,

Welcome to ASPNET newsgroup.
Regarding a procuding valid XHTML-compliant output in ASP.NET web
application, I've already seen many such topics in the online newsgroup and
some other web communities. Generally, we would have the following two
mechanism for asp.net 1.x pages currently:

1. Format output through page's Render method. In asp.net page's Render
event, we have the chance to call base's Render method to get the default
output content and do formatting on them.

2. Using Response Filter, asp.net provide us the ability to register a
response filter(request filter) on a certain http handler) at very begining
time when processing a request. And the Response Filter is just like a
Stream Chain which help us to intercept the output stream and do
modification. Here is a certain article discussing on this:

#ASP.NET Resources - Producing XHTML-Compliant Pages With Response ...

#ASP.NET 1.1 XHTML Compliance

In addition, in asp.net 2.0 there seems also have some features on building
xhtml-compliant page,

#XHTML and Accessibility in ASP.NET Whidbey

Hope also helps. Thanks,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
| Thread-Topic: Problems generating valid XHTML
| thread-index: AcWu6wF8jG45/l+mR2CnOVdsf7Vwiw==
| X-WBNR-Posting-Host:
| From: "=?Utf-8?B?TGVlIENoYXBtYW4=?=" <Le********@newsgroup.nospam>
| References: <13**********************************@microsoft.co m>
<9F**********************************@microsoft.co m>
| Subject: RE: Problems generating valid XHTML
| Date: Thu, 1 Sep 2005 04:48:01 -0700
| Lines: 12
| Message-ID: <7B**********************************@microsoft.co m>
| MIME-Version: 1.0
| Content-Type: text/plain;
| charset="Utf-8"
| Content-Transfer-Encoding: 7bit
| X-Newsreader: Microsoft CDO for Windows 2000
| Content-Class: urn:content-classes:message
| Importance: normal
| Priority: normal
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
| Newsgroups: microsoft.public.dotnet.framework.aspnet
| NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl
| Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGXA03.phx.gbl
| Xref: TK2MSFTNGXA01.phx.gbl
| X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet
| Sorry, one more time:
| The HTML generated is:
| value="x LT y ANDamp;ANDamp; x GT y"
| ;-)
| - Lee

Nov 19 '05 #4


Hmmm. Okay, that's not exactly what I was hoping for, but it'll do - I
guess. I suppose that at least an application that uses the filter method
will (hopefully) just need to drop the filter if it moves to ASP.NET 2.0...

- Lee
Nov 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

13 posts views Thread by Michele Simionato | last post: by
5 posts views Thread by Greg | last post: by
9 posts views Thread by Francesco Moi | last post: by
11 posts views Thread by Dan Rubin | last post: by
32 posts views Thread by jp29 | last post: by
1 post views Thread by livre | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.