html css rendering bidi

html - ¿Cómo solucionar problemas de bracket BiDi?



css rendering (4)

Como sabrá, algunos idiomas se escriben / leen de derecha a izquierda y estamos tratando de admitir algunos idiomas RTL. Para la interfaz de usuario web, dir = "rtl" en html hace la mayor parte del trabajo gracias a los algoritmos que tienen los navegadores. Pero encontré este problema con paréntesis en el texto:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Bracket problems with BiDi</title> </head> <body> <p style="direction: rtl;">Bracket problem: hello (world):</p> <p style="direction: rtl;">No bracket problem: hello (world) something:</p> <p style="direction: rtl;">Bracket problem: (السلام (عليكم </p> <p style="direction: rtl;">No bracket problem: السلام (عليكم) عليكم </p> </body> </html>

El problema se puede ver aquí: Screenshot

Así que quiero que ese último corchete quede al final. ¿Cuál sería tu solución?


Hay muchos problemas aquí. De acuerdo con el estándar de Unicode, los paréntesis son neutros, lo que significa que no se tratan de forma inherente como LTR o RTL. Toman la dirección de su lenguaje circundante. En los ejemplos en los que se está procesando incorrectamente, se supone que la dirección del corchete de cierre es la misma que en inglés, es decir, LTR.

1er problema: le dice al navegador que el párrafo debe tratarse como RTL. El navegador encuentra el inglés en el interior, que es LTR, por lo que cree que el inglés está incrustado dentro de un párrafo RTL, y el último carácter ")" se trata como RTL. (El párrafo que lo rodea es RTL).

Segundo problema: no hay ningún problema aquí, desde una simple mirada al código fuente que ha proporcionado, parece que ha proporcionado los soportes correctamente. Pero, de hecho, el corchete de cierre que debe estar después del texto RTL y antes del cierre </P> es en realidad antes del texto RTL inicial. Si lo escribe correctamente, parecería incorrecto (porque el editor de texto que está utilizando asume que el corchete final es LTR según Unicode). Para verificar esto, copie el contenido en su editor, coloque el cursor al final de "problema:" y presione la flecha derecha varias veces y observe la ubicación del último corchete.

Sin dar muchas más explicaciones, aquí hay algunos ejemplos para que esto funcione:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Bracket problems with BiDi</title> </head> <body> <p style="direction: rtl;"><span dir="ltr">Bracket problem no more: hello (world):</span></p> <p style="direction: rtl;"><span style="direction: ltr; unicode-bidi: embed">Bracket problem no more: hello (world):</span></p> <p style="direction: rtl;">Bracket problem no more: السلام (عليكم)</p> <!-- style for p tag below is ltr by default --> <p>Bracket problem no more: <span dir="rtl">السلام (عليكم)</span></p> <p>Bracket problem no more: <span style="direction: rtl; unicode-bidi: embed">السلام (عليكم)</span></p> </body> </html>

Hay diferencias en cómo style = "direction: ltr;" works y dir = "ltr" funciona, así que he dado ejemplos de ambos. Además, como supongo que básicamente necesita resolver su segundo problema, en el que mayormente tiene texto RTL en un documento de otro modo LTR, proporcioné los dos últimos ejemplos.

NOTA: Si los dos últimos ejemplos son lo que está buscando, y va a usar CSS, se requiere la propiedad unicode-bidi, y eso hace toda la diferencia entre trabajar y no trabajar.


La respuesta de silkfield me llevó a this página que muestra muchos de los posibles problemas con los diseños de BiDi, incluido el problema del soporte.


Solo necesita agregar el carácter LRM después del último corchete. Entidad HTML: &#x200E;

<html dir="rtl"> <body> <p>hello (world)&#x200E;</p> </body></html>

Esto le indica al navegador que interprete los corchetes como una lectura de izquierda a derecha.


puede poner el siguiente css para su problema " unicode-bidi: embed " en la etiqueta del cuerpo, funcionará bien