IE10 - RTL reversed - how to fix?

2019-07-21 11:49发布

问题:

Can't really understand the problem. For some reason - IE10 presents Hebrew in reversed order. If I use compatibility mode(IE Developer Tools, IE 10 compatibility mode) it works fine... http://www.undergraduate.technion.ac.il/rishum/index.html

Tried all sorts of RTL fixes(Css, dir attribute, etc.)

回答1:

I'm no expert in RTL, but considering it works in compatibility mode, then in short term try adding

<meta http-equiv="X-UA-Compatible" content="IE=5">

In long term (or if that doesn't work) you show consider rewriting the pages to current HTML standards. You should at least

  • Add a charset declaration (to the HTTP header NOT the HTML) especially since this is Hebrew and not basic ASCII. (This also my help with the RTL problem).
  • Get rid of the frames. Frames are an obsolete and outdated technology.
  • Correct the HTML syntax errors.
  • Use CSS for styling.
  • Get rid of the graphics for links. (I'd love to read the page, but graphics can't be translated automatically).

BTW, use http://validator.w3.org/ to check for the worst errors. Since this is a framed site, you'll need to check each frame document separately.



回答2:

Not all text on the page is in reversed order. It seems that the parts where the order is reversed are in framed pages that are in “Hebrew Visual” encoding, ISO-8859-8, i.e. in an encoding where Hebrew text is written in wrong order.

For the page http://www.undergraduate.technion.ac.il/rishum/entry.php no encoding information is available in HTTP headers, and the page contains <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=VISUAL"> which uses an undefined name VISUAL (ISO-8859-8 is the registered name, and hebrew is a defined synonym). But it seems that IE 10 recognizes the encoding as ISO-8859-8, it just implements it wrong.

On my IE 10 (Win 7), the order is wrong both in standards and quirks mode. Setting “document mode” (which is really the document rendering mode of the browser) to IE 9 or IE 8 does not change this; in IE 7 mode, the rendering is correct.

It is difficult to say whether this IE bug could be circumvented. It is probably best to avoid the issue by using UTF-8 encoding throughout, i.e. to recode the files to UTF-8 and to declare the encoding as UTF-8.



回答3:

Is the content in a Frameset? Working with Arabic content in a Frameset I have seen this problem in IE10 and IE11. It seems IE tries to mirror the enitre frame.

The solution that worked for me was to remove the dir attribute from the opening html tag in the top frameset and set dir="rtl" in the opening html tag in the content pages in each frame.

So in the frameset:

<html>

<frameset>
<frame src="frame_a.html">
<frame src="frame_b.html">
</frameset>

</html>

And then in frame frame_a.html:

<html dir="rtl">
<head></head>
<body>
    <p>لقد اطّلعت على هذا الدرس من قبل.هل تود العودة إلى آخر موضع اطّلععليه في الدرس؟</p>
</body>
</html>