Problems generating valid XHTML

G

Guest

Hi,

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

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?

Thanks,
- Lee
 
G

Guest

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

value="ANDamp;lt;"

instead of

value="ANDlt;"

- Lee
 
G

Guest

Sorry, one more time:

The HTML generated is:

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

;-)

- Lee
 
S

Steven Cheng[MSFT]

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 ...
http://www.aspnetresources.com/articles/HttpFilters.aspx

#ASP.NET 1.1 XHTML Compliance
http://weblogs.asp.net/ssivakumar/archive/2004/11/05/252735.aspx

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
http://weblogs.asp.net/scottgu/archive/2003/11/25/39620.aspx

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
rights.)


--------------------
| Thread-Topic: Problems generating valid XHTML
| thread-index: AcWu6wF8jG45/l+mR2CnOVdsf7Vwiw==
| X-WBNR-Posting-Host: 194.200.242.250
| From: "=?Utf-8?B?TGVlIENoYXBtYW4=?=" <[email protected]>
| References: <[email protected]>
<[email protected]>
| Subject: RE: Problems generating valid XHTML
| Date: Thu, 1 Sep 2005 04:48:01 -0700
| Lines: 12
| Message-ID: <[email protected]>
| 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 10.40.2.250
| Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGXA03.phx.gbl
| Xref: TK2MSFTNGXA01.phx.gbl
microsoft.public.dotnet.framework.aspnet:121691
| 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
|
|
|
 
G

Guest

Steven,

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...

Thanks,
- Lee
 
S

Steven Cheng[MSFT]

Thanks for your respose Lee,

Yes, using filter will be the most loose coupled means currently which just
require us to globally register a filter for our Page Handlers. Also, I'm
sure the new comming version will have much improved on this since XHTML is
really a trend.

Thanks again for your posting.

Regards,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
--------------------
| Thread-Topic: Problems generating valid XHTML
| thread-index: AcWvoy/74rWJ/hTsRF+fZFKlnLl4GQ==
| X-WBNR-Posting-Host: 194.200.242.250
| From: "=?Utf-8?B?TGVlIENoYXBtYW4=?=" <[email protected]>
| References: <[email protected]>
<[email protected]>
<[email protected]>
<[email protected]>
| Subject: RE: Problems generating valid XHTML
| Date: Fri, 2 Sep 2005 02:46:26 -0700
| Lines: 11
| Message-ID: <[email protected]>
| 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 10.40.2.250
| Path: TK2MSFTNGXA01.phx.gbl!TK2MSFTNGXA03.phx.gbl
| Xref: TK2MSFTNGXA01.phx.gbl
microsoft.public.dotnet.framework.aspnet:121952
| X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet
|
|
| Steven,
|
| 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...
|
| Thanks,
| - Lee
|
|
|
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,780
Messages
2,569,610
Members
45,255
Latest member
TopCryptoTwitterChannels

Latest Threads

Top