Проблема в том, что '.'символ является «нейтрально-направленным символом», это означает, что он получает направление от следующего сильного направленного символа, если после этого символа нет, он получает его из контейнера.В вашем случае это последний.Одним из решений, как уже было найдено, является создание контейнера справа налево.Но есть еще два других решения:
1 - Поставьте еще один невидимый сильный направленный символ справа налево после «.».К счастью, у юникода есть один специальный символ для того, что является «меткой справа налево» (U + 200F)
2- Поставьте «символ переопределения справа налево» (U + 202E) передтекст, поэтому после этой отметки любой нейтральный символ получает направление справа налево.Вы можете завершить переопределение, добавив символ «всплывающее направленное форматирование» (U + 202C).
Я изменил пример кода @ shervin, чтобы продемонстрировать его.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<canvas id="myCanvas" width="700" height="250" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.
</canvas>
<script type="text/javascript" charset="utf-8">
var c = document.getElementById("myCanvas");
var cArabic = c.getContext("2d");
cArabic.font="20px Arial";
//option 1 : adding right-to-left mark at the end to put the '.' between two strong right to left charachters, so it will treated as right to left.
var str1 = "این یک آزمایش است." + "\u200F";
//option 2 : adding right-to-left override at the begining of the text so every neutral charachter afterward becomes righ to left.
var str2;
str2 = "\u202E";
str2+= "این یک آزمایش است.";
// you might want to finish the override by 'pop directional formatting' charachter
str2 += "\u202C";
cArabic.fillText(str1, 200, 30);
cArabic.fillText(str2, 200, 70);
</script>
</body>
</html>
Результирующее изображение
Существуют и другие решения.Вы можете найти их в спецификации Unicode на этой странице .Это «изоляция направления» (U + 2067), которая имеет проблемы с рендерингом в Chrome.И «внедрение направления» с U + 202B, что аналогично переопределению направления.