---
title: "XHTMLStrictFilter problem med java script"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/112696-xhtmlstrictfilter-problem-med-java-script"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Mc Fetto"
published: "2004-10-01T15:03:06.000Z"
updated: "2004-10-07T16:36:55.000Z"
replies: 15
views: 357
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/112696-xhtmlstrictfilter-problem-med-java-script"
---

# XHTMLStrictFilter problem med java script

## #1 — Mc Fetto, 2004-10-01T15:03Z

Jag använder mig av XHTMLStrictFilter, och det fungerar finfint att validera sidorna. Problemet är när jag har en LinkButton: 

```
		private void LinkButton6_Click(object sender, System.EventArgs e)
		{
			Response.Cookies["t"].Expires = DateTime.Now.AddDays(-1);
			Session["UserName"] = null;
		}
```

När jag använder filtret får jag upp java script error och om jag inte använder det fungerar det som det ska...

Det enda som skiljer sig åt i källkoden är:
med filter: 

```
<form  method="post" action="index.aspx" id="Form1">
```

utan: 

```
<form name="Form1" method="post" action="index.aspx" id="Form1">
```

alltså name-attributet.. What to do??

Permalänk: https://www.webforum.nu/p/112696

## #2 — nitro2k01, 2004-10-01T15:23Z

Det där är ju server-kod, väl? Hur ser javascript-koden ut?

Permalänk: https://www.webforum.nu/p/1450559

## #3 — Mc Fetto, 2004-10-01T15:26Z

De två sista kodsnuttarna i inlägget ovan är från klientsidan.

```
	function __doPostBack(eventTarget, eventArgument) {
		var theform;
		if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
			theform = document.Form1;
		}
		else {
			theform = document.forms["Form1"];
		}
		theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
		theform.__EVENTARGUMENT.value = eventArgument;
		theform.submit();
	}
```

Så här ser scriptet ut och det är likadant både med och utan filtret!

Permalänk: https://www.webforum.nu/p/1450564

## #4 — nitro2k01, 2004-10-01T15:29Z

```
 
function __doPostBack(eventTarget, eventArgument) {
  var theform;
  if (!(theform = document.getElementById("Form1")))
    if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1)
      theform = document.Form1;
    else
      theform = document.forms["Form1"];
  theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
  theform.__EVENTARGUMENT.value = eventArgument;
  theform.submit();
}
```

/r Fixade indenteringen
/r igen: Tog bort onödiga måsvingar.

Permalänk: https://www.webforum.nu/p/1450566

## #5 — Mc Fetto, 2004-10-01T15:37Z

Jaha, det verkar ju bra (kan noll javascript). Hur får jag sedan filtret att skapa detta istället för mitt!?

Permalänk: https://www.webforum.nu/p/1450574

## #6 — nitro2k01, 2004-10-01T15:45Z

Filtret? Kan du inte bara redigera koden?

Permalänk: https://www.webforum.nu/p/1450581

## #7 — Mc Fetto, 2004-10-01T16:04Z

Nej det är ju kod som genereas "on the fly" från asp.net

Permalänk: https://www.webforum.nu/p/1450590

## #8 — Mc Fetto, 2004-10-01T17:33Z

Har surfat runt lite och min klass kan vara "omodern", så om någon har en modifierad, nyare version av klassen så posta för guds skull ;)

```
	public class XHTMLStrictFilter : Stream 
	{ 
		private Stream _sink; 
		private long _position; 

		private static Regex _regForm = new Regex("<form .*name=.* .*>", RegexOptions.Compiled|RegexOptions.IgnoreCase); 
		private static Regex _regNameReplace = new Regex("name=[^ ]*", RegexOptions.Compiled|RegexOptions.IgnoreCase); 
		private static Regex _regViewState = new Regex("<input type=\"hidden\" name=\"__VIEWSTATE\" value=\".*\" />", RegexOptions.Compiled|RegexOptions.IgnoreCase); 

		private bool _formFix; 
		private bool _viewStateFix; 

		public XHTMLStrictFilter(Stream sink) 
		{ 
			_sink = sink; 
		} 

		// The following members of Stream must be overriden. 
		public override bool CanRead 
		{ 
			get { return true; } 
		} 

		public override bool CanSeek 
		{ 
			get { return true; } 
		} 

		public override bool CanWrite 
		{ 
			get { return true; } 
		} 

		public override long Length 
		{ 
			get { return 0; } 
		} 

		public override long Position 
		{ 
			get { return _position; } 
			set { _position = value; } 
		} 

		public override long Seek(long offset, System.IO.SeekOrigin direction) 
		{ 
			return _sink.Seek(offset, direction); 
		} 

		public override void SetLength(long length) 
		{ 
			_sink.SetLength(length); 
		} 

		public override void Close() 
		{ 
			_sink.Close(); 
		} 

		public override void Flush() 
		{ 
			_sink.Flush(); 
		} 

		public override int Read(byte[] buffer, int offset, int count) 
		{ 
			return _sink.Read(buffer, offset, count); 
		} 

		// The Write method actually does the filtering. 
		public override void Write(byte[] buffer, int offset, int count) 
		{ 
			byte[] data; 

			if(!_formFix || !_viewStateFix) 
			{ 
				string htmlOutput = System.Text.UTF8Encoding.UTF8.GetString(buffer); 
				int length = htmlOutput.Length; 
				if(!_formFix && _regForm.IsMatch(htmlOutput)) 
				{ 
					string formMatch=_regForm.Match(htmlOutput).Value; 
					htmlOutput=Regex.Replace(htmlOutput, formMatch, _regNameReplace.Replace(formMatch, ""), RegexOptions.IgnoreCase); 
					_formFix=true; 
				} 
				if(!_viewStateFix && _regViewState.IsMatch(htmlOutput)) 
				{ 
					string viewStateMatch=_regViewState.Match(htmlOutput).Value; 
					htmlOutput=Regex.Replace(htmlOutput, viewStateMatch, "<div>"+viewStateMatch+"</div>", RegexOptions.IgnoreCase); 
					_viewStateFix=true; 
				} 
				data = System.Text.UTF8Encoding.UTF8.GetBytes(htmlOutput); 
				count -= length - htmlOutput.Length; 
			} 
			else 
			{ 
				data = new byte[count]; 
				Buffer.BlockCopy(buffer, offset, data, 0, count); 
			} 
			_sink.Write(data, 0, count); 
		} 
	}
}
```

Permalänk: https://www.webforum.nu/p/1450602

## #9 — Mc Fetto, 2004-10-03T21:30Z

Ingen, det är ju ett par anändare på forumet som uppenbarligen använt sig av denna klass. Har sök men inte hittat lösning på just detta problemet. Har ingen av er som använt klassen stött på mitt problem?

Permalänk: https://www.webforum.nu/p/1451574

## #10 — Daniel78, 2004-10-05T05:41Z

Hej,

Denna typ av problem löste vi i denna tråd:
[XHTMLStrictFilter och autopostback](http://www.webforum.nu/showthread.php?s=&forumid=191&threadid=95412&highlight=XHTMLStrictFilter)

Skillnaden var att här fungerade det inte att göra autopostback från en listbox pga att filtret plockade bort "name" attributet från listboxen, filtret som finns i denna tråd, löste dock problemet.

MVH
Daniel

Permalänk: https://www.webforum.nu/p/1452201

## #11 — Mc Fetto, 2004-10-05T07:08Z

mm, tittade på den tidigare men då får jag två type attribut i javascripttaggen :(

Permalänk: https://www.webforum.nu/p/1452237

## #12 — Daniel78, 2004-10-05T08:09Z

Okej, jag har nog löst det i min version för den blir validerad. Men jag är på jobbet nu så jag får bifoga den ikväll.

Mvh
Daniel

Permalänk: https://www.webforum.nu/p/1452251

## #13 — Mc Fetto, 2004-10-06T15:17Z

> **Daniel78 skrev:**
>
> Okej, jag har nog löst det i min version för den blir validerad. Men jag är på jobbet nu så jag får bifoga den ikväll.
> 
> Mvh
> Daniel

Det får du gärna göra! :bire

Permalänk: https://www.webforum.nu/p/1453143

## #14 — Daniel78, 2004-10-07T09:03Z

Jag lovar att jag ska försöka få hit koden ikväll, har haft lite annat att göra nu några kvällar och helt enkelt glömt bort att skicka.  :r 

Mvh
Daniel

Permalänk: https://www.webforum.nu/p/1453497

## #15 — Daniel78, 2004-10-07T16:30Z

Här är koden:

```
Public Class XHTMLStrictFilter
    Inherits Stream
    Private _sink As Stream
    Private _position As Long

    Private Shared _regForm As New Regex("<form .*name=.* .*>", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    Private Shared _regNameReplace As New Regex("name=[^ ]*", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    Private Shared _regViewState As New Regex("<input type=""hidden"" name=""__VIEWSTATE"" value="".*"" />", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    ' Tillagd 2004-02-11. Tar bort alla border="0"
    Private Shared _regBorder As New Regex("border=[^ ]*", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    ' Tillagd 2004-03-03. Byter language="javascript" till type="text/javascript"
    Private Shared _regType As New Regex("language=""javascript""", RegexOptions.Compiled Or RegexOptions.IgnoreCase)
    ' Tillagd 2004-03-03. fixar namnet på formuläret.
    Private Shared _regForm1 As New Regex("document.Form1", RegexOptions.Compiled Or RegexOptions.IgnoreCase)

    Private _formFix As Boolean
    Private _viewStateFix As Boolean
    Private _borderFix As Boolean
    Private _typeFix As Boolean
    Private _form1Fix As Boolean

    Public Sub New(ByVal sink As Stream)
        _sink = sink
    End Sub 'New

    ' The following members of Stream must be overriden.

    Public Overrides ReadOnly Property CanRead() As Boolean
        Get
            Return True
        End Get
    End Property

    Public Overrides ReadOnly Property CanSeek() As Boolean
        Get
            Return True
        End Get
    End Property

    Public Overrides ReadOnly Property CanWrite() As Boolean
        Get
            Return True
        End Get
    End Property

    Public Overrides ReadOnly Property Length() As Long
        Get
            Return 0
        End Get
    End Property

    Public Overrides Property Position() As Long
        Get
            Return _position
        End Get
        Set(ByVal Value As Long)
            _position = value
        End Set
    End Property

    Public Overrides Function Seek(ByVal offset As Long, ByVal direction As System.IO.SeekOrigin) As Long
        Return _sink.Seek(offset, direction)
    End Function 'Seek

    Public Overrides Sub SetLength(ByVal length As Long)
        _sink.SetLength(length)
    End Sub 'SetLength

    Public Overrides Sub Close()
        _sink.Close()
    End Sub 'Close

    Public Overrides Sub Flush()
        _sink.Flush()
    End Sub 'Flush

    Public Overrides Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
        Return _sink.Read(buffer, offset, count)
    End Function 'Read

    ' The Write method actually does the filtering.
    Public Overrides Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
        Dim data() As Byte

        If Not _formFix Or Not _viewStateFix Or Not _borderFix Or Not Me._typeFix Or Not Me._form1Fix Then
            'string htmlOutput = System.Text.UTF8Encoding.UTF8.GetString(buffer);
            Dim htmlOutput As String = System.Text.Encoding.GetEncoding("iso-8859-1").GetString(buffer)
            Dim length As Integer = htmlOutput.Length
            If Not _formFix And _regForm.IsMatch(htmlOutput) Then
                Dim formMatch As String = _regForm.Match(htmlOutput).Value

                ' *** Borttagen 03-06-17 ***
                ' *** htmlOutput=Regex.Replace(htmlOutput, formMatch, _regNameReplace.Replace(formMatch, ""), RegexOptions.IgnoreCase);
                htmlOutput = Regex.Replace(htmlOutput, _regNameReplace.Match(formMatch).Value, "", RegexOptions.IgnoreCase)
                _formFix = True
            End If
            If Not _viewStateFix And _regViewState.IsMatch(htmlOutput) Then
                Dim viewStateMatch As String = _regViewState.Match(htmlOutput).Value
                htmlOutput = Regex.Replace(htmlOutput, "<input type=""hidden"" name=""__VIEWSTATE"" value="".*"" />", "<div>" + viewStateMatch + "</div>", RegexOptions.IgnoreCase)
                _viewStateFix = True
            End If
            ' Tillagd 2004-02-11. Tar bort alla border="0"
            If Not _borderFix And _regBorder.IsMatch(htmlOutput) Then
                Dim formMatch As String = _regBorder.Match(htmlOutput).Value
                htmlOutput = Regex.Replace(htmlOutput, _regBorder.Match(formMatch).Value, "", RegexOptions.IgnoreCase)
                _borderFix = True
            End If
            If Not Me._typeFix And _regType.IsMatch(htmlOutput) Then
                Dim formMatch As String = _regType.Match(htmlOutput).Value
                htmlOutput = Regex.Replace(htmlOutput, _regType.Match(formMatch).Value, "type=""text/javascript""", RegexOptions.IgnoreCase)
                Me._typeFix = True
            End If
            If Not Me._form1Fix And _regForm1.IsMatch(htmlOutput) Then
                Dim formMatch As String = _regForm1.Match(htmlOutput).Value
                htmlOutput = Regex.Replace(htmlOutput, _regForm1.Match(formMatch).Value, "document.forms[0]", RegexOptions.IgnoreCase)
                Me._form1Fix = True
            End If
            'data = System.Text.UTF8Encoding.UTF8.GetBytes(htmlOutput);
            data = System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(htmlOutput)
            count -= length - htmlOutput.Length
        Else
            data = New Byte(count) {}
            'Buffer.BlockCopy(buffer, offset, data, 0, count)
        End If
        _sink.Write(data, 0, count)
    End Sub 'Write
End Class 'XHTMLStrictFilter
```

Permalänk: https://www.webforum.nu/p/1456575

## #16 — Mc Fetto, 2004-10-07T16:36Z

Tackar :) nu sket sig bara all layout buhuu.
Men det går nog att ordna!

Permalänk: https://www.webforum.nu/p/1456581

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/112696-xhtmlstrictfilter-problem-med-java-script
