by Michael S. Kaplan, published on 2008/09/01 16:31 -04:00, original URI: http://blogs.msdn.com/b/michkap/archive/2008/09/01/8917599.aspx
Anyone who has been here for any length of time knows that I am not thrilled with Bidi support on various operating systems and in various browsers.
But I noticed something today over in Facebook, at the various "groups" that I have joined (the funny part is that most of them I have never even looked at after I joined them, but that might be a blog for another day!).
To show you what troubled me, take a look at this screenshot from FireFox (my default browser of choice, these days!):
Now a little way down the list, one of the group's (whose sole purpose seems to be to abuse Unicode) somehow managed to corrup the rest of the list and reverse everything!
The story is the same in Safari:
and on Opera as well:
Though it does better in both IE6 (which uses the old facebook):
and in IE 7.0, which shows the new Facebook like the other broswers do:
Now looking at the text stream as code points:
003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0070 0072 006f 0066 0069 006c 0065 005f 0069 006e 0066 006f 005f 0063 006f 006e 0074 0061 0069 006e 0065 0072 0022 003e 003c 0061 0020 0063 006c 0061 0073 0073 003d 0022 0069 006e 0066 006f 005f 0065 0064 0069 0074 005f 006c 0069 006e 006b 0022 0020 006f 006e 0063 006c 0069 0063 006b 003d 0022 0022 0020 0068 0072 0065 0066 003d 0022 0023 0022 0020 0069 0064 003d 0022 0069 006e 0066 006f 005f 0073 0065 0063 0074 0069 006f 006e 005f 0065 0064 0069 0074 005f 0032 0033 0036 0031 0038 0033 0031 0036 0032 0032 0022 003e 0045 0064 0069 0074 003c 002f 0061 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 0020 0068 0069 0064 0064 0065 006e 005f 0065 006c 0065 006d 0020 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 0031 0038 0020 006c 0069 006e 006b 005f 006d 0065 006e 0075 0020 0068 0069 0064 0064 0065 006e 005f 0065 006c 0065 006d 0020 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 006c 0065 0066 0074 0022 0020 0069 0064 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 0069 006e 0066 006f 005f 0073 0065 0063 0074 0069 006f 006e 005f 0032 0033 0036 0031 0038 0033 0031 0036 0032 0032 0022 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 0068 0065 0061 0064 0065 0072 005f 0073 0068 0061 0064 006f 0077 0022 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 0068 0065 0061 0064 0065 0072 0020 0063 006c 0065 0061 0072 0066 0069 0078 0022 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 006d 0061 0073 006b 0022 003e 003c 002f 0064 0069 0076 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 0074 0069 0074 006c 0065 0022 003e 004f 0070 0074 0069 006f 006e 0073 003c 002f 0064 0069 0076 003e 003c 002f 0064 0069 0076 003e 003c 002f 0064 0069 0076 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 0066 006c 0079 006f 0075 0074 005f 006d 0065 006e 0075 005f 0063 006f 006e 0074 0065 006e 0074 005f 0073 0068 0061 0064 006f 0077 0022 003e 003c 0064 0069 0076 0020 0063 006c 0061 0073 0073 003d 0022 006d 0065 006e 0075 005f 0063 006f 006e 0074 0065 006e 0074 0022 003e 003c 0061 0020 0068 0072 0065 0066 003d 0022 0023 0022 003e 0045 0064 0069 0074 0020 0049 006e 0066 006f 0072 006d 0061 0074 0069 006f 006e 003c 002f 0061 003e 003c 0061 0020 0068 0072 0065 0066 003d 0022 0023 0022 003e 0052 0065 006d 006f 0076 0065 0020 0053 0065 0063 0074 0069 006f 006e 003c 002f 0061 003e 003c 002f 0064 0069 0076 003e 003c 002f 0064 0069 0076 003e 003c 002f 0064 0069 0076 003e 003c 0064 0069 0076 0020 0069 0064 003d 0022 0069 006e 0066 006f 005f 0073 0065 0063 0074 0069 006f 006e 005f 0069 006e 0066 006f 005f 0032 0033 0036 0031 0038 0033 0031 0036 0032 0032 0022 0020 0063 006c 0061 0073 0073 003d 0022 0070 0072 006f 0066 0069 006c 0065 005f 0069 006e 0066 006f 0022 003e 003c 0064 006c 0020 0063 006c 0061 0073 0073 003d 0022 0069 006e 0066 006f 0020 0063 006c 0065 0061 0072 0066 0069 0078 0022 003e 003c 0064 0074 003e 004d 0065 006d 0062 0065 0072 0020 006f 0066 003a 003c 002f 0064 0074 003e 003c 0064 0064 003e 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0033 0037 0032 0032 0038 0039 0034 0035 0031 0039 0035 0022 003e 004d 0065 0074 0061 006c 006c 0069 0063 0061 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0036 0033 0038 0033 0030 0031 0035 0035 0022 003e 0053 006f 0063 0069 0065 0074 0079 0020 0066 006f 0072 0020 0053 0070 0072 0065 0061 0064 0069 006e 0067 0020 0049 006e 0074 0065 0072 0072 006f 0062 0061 006e 0067 0020 0041 0077 0061 0072 0065 006e 0065 0073 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0033 0033 0038 0030 0037 0032 0036 0032 0032 0035 0036 0022 003e 0041 0061 0072 006f 006e 0020 0053 006f 0072 006b 0069 006e 0020 0026 0061 006d 0070 003b 0020 0054 0068 0065 0020 0046 0061 0063 0065 0062 006f 006f 006b 0020 004d 006f 0076 0069 0065 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0038 0031 0036 0030 0039 0030 0034 0036 0034 0033 0022 003e 0043 006f 0063 0074 0065 0061 0075 0020 0054 0077 0069 006e 0073 0020 0066 0061 006e 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0031 0031 0035 0034 0039 0030 0034 0031 0022 003e 0048 0065 006c 006c 006f 0020 006d 0079 0020 006e 0061 006d 0065 0020 0069 0073 0020 004b 0041 0050 004c 0041 004e 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0031 0038 0034 0038 0037 0033 0039 0034 0031 0036 0038 0022 003e 0046 0054 0050 0020 0041 006c 0075 006d 006e 0069 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0032 0034 0034 0035 0038 0034 0030 0038 0022 003e 0056 006f 0069 0063 0065 0020 004e 006f 0074 0020 0048 0065 0061 0072 0064 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0034 0036 0037 0036 0030 0036 0035 0035 0031 0032 0022 003e 0041 0066 0072 0069 0063 0061 006e 0020 004c 0061 006e 0067 0075 0061 0067 0065 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0037 0030 0037 0038 0038 0035 0032 0035 0033 0035 0022 003e 0057 0065 0062 0020 0053 0074 0061 006e 0064 0061 0072 0064 0073 0020 0026 0061 006d 0070 003b 0020 0042 0065 0073 0074 0020 0050 0072 0061 0063 0074 0069 0063 0065 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0031 0039 0030 0035 0030 0034 0032 0035 0039 0030 0034 0022 003e 09ac 09be 0982 09b2 09be 09ad 09be 09b7 09c0 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0033 0032 0039 0030 0036 0034 0033 0033 0034 0022 003e 202e 202e 202e 202e 202e 202e 202e 202e 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0033 0031 0030 0032 0032 0039 0039 0030 0034 0022 003e 0049 0027 006d 0020 0067 006f 006e 006e 0061 0020 0063 006f 006e 0071 0075 0065 0072 0020 0074 0068 0065 0020 0077 006f 0072 006c 0064 0020 0077 0069 0074 0068 0020 202e 0065 0064 006f 0063 0069 006e 0055 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0036 0032 0035 0038 0034 0039 0034 0039 0022 003e 222a 006e 0069 2282 043e 2202 03b5 0020 03b1 0062 222a 0073 03b5 0072 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0033 0032 0031 0036 0034 0033 0031 0034 0022 003e 0051 0075 0065 0073 0074 0069 006f 006e 0061 0074 0069 006f 006e 0020 006d 0061 0072 006b 0020 0061 0077 0061 0072 0065 006e 0065 0073 0073 0020 0067 0072 006f 0075 0070 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0034 0030 0034 0038 0030 0038 0030 0030 0039 0036 0038 0022 003e 0052 006f 006f 006d 0020 0031 0030 0037 0020 0041 006c 0075 006d 006e 0069 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0031 0033 0033 0030 0036 0039 0035 0039 0022 003e 004f 0066 0066 0069 0063 0061 006c 0020 0043 0042 0047 0042 0020 0046 0061 0063 0065 0062 006f 006f 006b 0020 0067 0072 006f 0075 0070 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0038 0032 0035 0030 0039 0036 0034 0032 0037 0033 0022 003e 004e 0069 0063 0065 0020 004a 0065 0077 0069 0073 0068 0020 0047 0069 0072 006c 0073 0020 0047 006f 006e 0065 0020 0042 0061 0064 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0033 0030 0034 0033 0031 0030 0030 0032 0031 0036 0022 003e 0041 0020 0062 006c 0061 0063 006b 0020 0063 0061 0074 0020 0063 0072 006f 0073 0073 0069 006e 0067 0020 0079 006f 0075 0072 0020 0070 0061 0074 0068 0020 0073 0069 0067 006e 0069 0066 0069 0065 0073 0020 0074 0068 0061 0074 0020 0074 0068 0065 0020 0061 006e 0069 006d 0061 006c 0020 0069 0073 0020 0047 004f 0049 004e 0047 0020 0053 004f 004d 0045 0057 0048 0045 0052 0045 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0035 0035 0036 0035 0031 0033 0038 0034 0032 0033 0022 003e 0052 0045 0044 004c 0049 0047 0048 0054 0020 0041 0046 0054 0045 0052 0020 0048 004f 0055 0052 0053 0020 0045 0056 0045 0052 0059 0020 0053 0041 0054 0055 0052 0044 0041 0059 0020 004d 004f 0052 004e 0049 004e 0047 0020 0034 0041 004d 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0030 0038 0031 0038 0039 0037 0034 0032 0022 003e 0044 0061 0076 0069 0064 0020 0047 0069 006c 006d 006f 0075 0072 0027 0073 0020 0067 0075 0069 0074 0061 0072 0020 0074 006f 006e 0065 003a 0020 0073 006f 0020 0068 0065 0061 0076 0065 006e 006c 0079 002c 0020 0061 006e 0067 0065 006c 0073 0020 0061 0072 0065 0020 006a 0065 0061 006c 006f 0075 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0030 0033 0036 0032 0038 0038 0037 0031 0022 003e 0055 006e 006c 0069 006b 0065 0020 0039 0039 002e 0039 0039 0025 0020 006f 0066 0020 0074 0068 0065 0020 0046 0061 0063 0065 0062 006f 006f 006b 0020 0070 006f 0070 0075 006c 0061 0074 0069 006f 006e 002c 0020 0049 0020 0077 0061 0073 0020 0062 006f 0072 006e 0020 0069 006e 0020 0074 0068 0065 0020 0037 0030 0073 002e 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0033 0033 0037 0034 0034 0032 0035 0032 0035 0033 0022 003e 0054 0068 0065 0020 0050 0073 0079 0063 0068 0065 0064 0065 006c 0069 0063 0020 0046 0075 0072 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0031 0039 0036 0032 0031 0034 0036 0036 0038 0036 0022 003e 004c 0069 006e 0064 0073 0061 0079 0020 0052 0075 0073 0068 0020 004f 006e 0020 0054 006f 0075 0072 0020 0057 0069 0074 0068 0020 0050 0061 0074 0020 0042 0065 006e 0061 0074 0061 0072 0020 0061 006e 0064 0020 004e 0065 0069 006c 0020 0022 0053 0070 0079 0064 0065 0072 0022 0020 0047 0069 0072 0061 006c 0064 006f 0021 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0038 0031 0036 0032 0039 0039 0037 0037 0039 0034 0022 003e 0053 0061 0076 0065 0020 0057 0069 006e 0064 006f 0077 0073 0020 0058 0050 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0031 0038 0036 0039 0030 0034 0030 0032 0039 0035 0035 0022 003e 004f 0025 0020 0044 0052 0049 004e 004b 0020 0041 004e 0044 0020 0044 0052 0049 0056 0045 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0036 0035 0030 0034 0030 0038 0032 0037 0022 003e 004d 0056 0050 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0031 0030 0035 0036 0032 0036 0031 0038 0022 003e 004d 0069 0063 0072 006f 0073 006f 0066 0074 0020 004d 0056 0050 0073 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0036 0036 0037 0038 0036 0039 0038 0033 0033 0033 0022 003e 0053 0065 0061 0074 0074 006c 0065 0020 0042 0061 0072 006e 0069 0067 0068 0074 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0032 0032 0032 0030 0038 0032 0032 0033 0032 0037 0022 003e 0053 0065 0061 0074 0074 006c 0065 0020 0052 0065 0070 0065 0072 0074 006f 0072 0079 0020 0054 0068 0065 0061 0074 0072 0065 003c 002f 0061 003e 002c 0020 003c 0061 0020 0068 0072 0065 0066 003d 0022 002f 0067 0072 006f 0075 0070 002e 0070 0068 0070 003f 0067 0069 0064 003d 0031 0037 0038 0033 0031 0032 0035 0033 0037 0030 0034 0022 003e 0057 0072 006f 0078 0020 003a 0020 0050 0072 006f 0067 0072 0061 006d 006d 0065 0072 0020 0074 006f 0020 0050 0072 006f 0067 0072 0061 006d 006d 0065 0072 003c 002f 0061 003e 003c 002f 0064 0064 003e 003c 002f 0064 006c 003e
The most evil bit seems to be a small chunk that puts in eight U+202e (aka RIGHT-TO-LEFT OVERRIDE) characters (in red above).
Clearly abuse of Unicode, on many levels.
If you look at UAX#9 (the Bidi algorithm), which has this to say about these particular directional controls:
On web pages, the explicit bidi controls should be replaced by using the dir attribute with the values dir="ltr" or dir="rtl".
...
2.2 Explicit Directional Overrides
The following codes allow the bidirectional character types to be overridden when required for special cases, such as for part numbers. These codes allow for nested directional overrides. These characters are to be avoided wherever possible, because of security concerns.
Kind of says it all, right?
Now we hit the interesting pressure of the best user experience versus the best following of the standard. In this case, IE really seems to be taking HTML tags such as the various anchor tags used here for hyperlinks as a higher level protocol. which keeps these particular bad codes from spilling out past the one section they are in.
The other browsers clearly don't do this. They do stop at the overriding DIV of the section but the A is not all that enclosing, especially for non-textual elements.
Now due to the issues in The Bidi Algorithm's own SEP Field with higher level protocols, technically one could claim or deny that HTML is a higher level protocol and that all of these varying behaviors are valid.
Of course the non-IE behavior seems more comformant to the standard, which is a bit worse for users guiven how pooorly it recovers from less than ideal content of a generic web site with user-provided content in it.
Wouldn't these things be better if they were spelled out more explicitly? :-)
The Unicode characters are still out of town (reportedly hungover) though the bidirectional embedding dudes might have sponsored otherwise....
# Shoshannah Forbes on 2 Sep 2008 9:17 AM:
LOL!
I have evil visions of inserting RLO's into web apps which refuse to support bidi properly. Perhaps that will teach 'em ;-)
# Simon on 3 Sep 2008 3:01 AM:
technically one could claim or deny that HTML is a higher level protocol and that all of these varying behaviors are valid.
I don't think so: HTML says "Inline elements, on the other hand, do not inherit the dir attribute. This means that an inline element without a dir attribute does not open an additional level of embedding with respect to the bidirectional algorithm."
However, if I leave pedantic standards interpretation mode and think in broader terms, I would say that the Bidi behaviour defined by HTML is all very well for the time when the standard was written, when most of the web was static pages, but much more problematic in today's world. Even without control codes, you can get total chaos with a list of Facebook groups with names in RTL and LTR languages including numbers, e.g:
קורס סיור וניווט (סיוו"ן) 2008!, 888,888 Members by 08/08/08!
or just with status messages, e.g.
Simon מוריד פיירפוקס 4 hours ago
# Michael S. Kaplan on 3 Sep 2008 3:07 AM:
Well, perhaps -- but I was referring to Unicode and the Bidi algorithm, not the W3C. :-)
But it kind of makes me wonder if the W3C is so okay with poorly contained corruption across the web....
bobince on 19 Sep 2008 8:16 PM:
The W3/Unicode note ‘Unicode in XML and other Markup Languages’ (http://www.w3.org/TR/unicode-xml/ ) includes the bidi control characters amongst the ‘discouraged’ characters.
Web form-reading layers should really be stripping them out, along with other control characters (and over-long UTF-8 sequences, if it's one of those languages that doesn't convert everything to Unicode strings internally, and boo for those). However very very few of them do right now. (Hell, half the rock-bashers are still letting SQL injections through...)
That NOTE also says the characters are ‘strongly discouraged’ by HTML 4.01, which I can't really see — by my reading it only says that using markup instead is nicer, but one should choose to use one or the other.
Michael S. Kaplan on 20 Sep 2008 12:13 AM:
So the question in this case is who is more conformant to the standard, in this case where both markup and control characters are used.
I would argue that by minimizing the ill effects of the noncomformant page that in the end IE ends up closer to the spirit of the intent here, if not the letter. For "illegal" pages we are in a gray area anyway, but I do know the behavior almost tempts me to go back to IE when I think about it. :-(