מדריך לכתיבת עברית לוגית ב-HTML

מאת ניר דגן, מנהל אקדמיק פריוריטי בע"מ

מהי עברית לוגית?

עברית לוגית היא שיטה לכתיבת מסמכים אלקטרוניים בכתב העברי. בשיטה זו התוים מסודרים בקובץ בסדר הקלדתם (וקריאתם) הטבעי, ואילו התוכנה המציגה את הקובץ (למשל דפדפן או מעבד תמלילים) מסדרת את התוים לפי הסדר המקובל בהצגתם.

התוכנה המציגה מבחינה בין סוגים שונים של תוים (אותיות עבריות, אותיות לטיניות, ספרות, סימני פיסוק, ועוד) וע"י הבחנה זו מסוגלת לסדר את התוים כמקובל.

למשל, המילה "עברית" תהיה מאוחסנת בסדר כתיבתה: ע' ולאחריה ב' ולאחריה ר' וכן הלאה, והיא תהיה מוצגת כשאותיותיה מסודרות מימין לשמאל. המילה האנגלית "Hebrew" מאוחסנת אף היא בסדר כתיבתה: H תחילה ולאחריה e וכן הלאה, אך תהיה מוצגת כשאותיותיה מסודרות משמאל לימין, כי היא בכתב לטיני.

למה לכתוב בעברית לוגית ב-HTML?

שפת הסימון HTML מיועדת לכתיבת מסמכים בצורה המאפשרת את הצגתם במצבים רבים ומגוונים: דפדפנים בעלי רזולוציות שונות, גודל גופנים שונה, וכן בדפוס, במכשירים נישאים בכף-יד, ואפילו בדפדפנים הקוראים את הטקסט בקול ולא מציגים אותו באופן חזותי.

לצורך השגת מטרה זאת, תגי ה-HTML מסמנים את המבנה הלוגי של המסמך, ולא את אופן הצגתו החזותית. אופן ההצגה החזותית יכול להיות מושפע מגיליון סגנון נפרד שכתב מחבר מסמך ה-HTML, ומגיליונות סגנון נוספים שהמשתמש הקורא את המסמך בחר לפי העדפותיו.

עברית לוגית מאפשרת ניצול היתרונות של ריבוי דרכי התצוגה.

בנוסף לכך, העברית הלוגית היא תקן בינלאומי, לא רק ב-HTML, אלא ביישומי מחשב בכלל. משמעות הדבר שניתן להעביר טקסטים הכתובים בעברית לוגית מיישום אחד למישנהו ללא קושי, אפילו אם היישומים יוצרו ע"י יצרנים שונים.

האלטרנטיבה לעברית לוגית היא עברית ויזואלית שחסרונותיה רבים.

תוים, קידוד, וגופנים

תו הוא מושג מופשט כגון "האות העברית אלף" או "סימן קריאה". קידוד זו התאמה בין בתים בקובץ אלקטרוני ובין תוים. גופן הוא "ציור" של תו. כאשר דפדפן קורא מסמך HTML, תחילה הוא מתרגם את הבתים בקובץ האלקטרוני לתוים. על מנת לעשות זאת, הא צריך לדעת באיזה קידוד המסמך כתוב. לאחר מכן הוא מציג את המסמך ע"י בחירת גופנים מתאימים.

ניתן לכתוב ב-HTML כל תו השייך לאוסף התוים האוניברסלי, המוגדר בתקן יוניקוד. ובפרט כל התוים בשפות הנכתבות בכתב העברי (עברית, יידיש, לאדינו, ארמית).

לכמעט כל המשתמשים שיש להם מחשבים יודעי עברית יש גופנים לתוים המצויים בקידוד windows-1255 של מיקרוסופט. הדבר נכון גם למשתמשים במערכות הפעלה אחרות (אם כי תמיכת העברית במערכות אלה היא עפ"ר דלה).

לרשימת התוים המופיעים ב-windows-1255 ראו טבלאות 1, 2, 3, ו-5 ברשימת התוים העבריים (באנגלית).

למרות שאפשר לכתוב ב-HTML גם תוים רבים אחרים הרלוונטיים למסמכים בכתב העברי, ייתכן שלא יהיו למשתמשים הגופנים הדרושים להצגתם.

ניתן ב-HTML לקדד בכל קידוד, ללא קשר לתוים הרצויים. זה מתאפשר הודות למנגנון של מראי מקום לתוים. יחד עם זאת, יש קידודים שהם עדיפים על פני אחרים. השיקולי המרכזי בבחירת הקידוד הוא התמיכה בדפדפן (ובמדפסת) של המשתמש.

מומלץ להשתמש בקידוד windows-1255 או iso-8859-8. בקידוד הראשון ניתן לקדד את כל אחד מהתוים המוזכרים לעיל ע"י בית יחיד. בקידוד השני לא ניתן לקדד את התוים המופיעים בטבלה 5 (ניקוד, דיאגרפיות יידישאיות, ומבחר סימנים וסמלים כולל מרכאות, מקף עברי, סימן של שקל חדש ₪), ויש לקדד אותם ע"י מראי מקום תוים. למשל את סימן השקל החדש ניתן לסמן ₪ או ₪ שנראים בדפדפן שלך ₪ או ₪ בהתאמה.

לאור התמיכה החלשה במראי מקום תוים בדפדפנים ישנים, רצוי להשתמש ב-windows-1255 במסמכים הכוללים תוים החסרים ב-iso-8859-8.

מסמכים בעברית לוגית המקודדים ב-iso-8859-8 יש לסמן כ-iso-8859-8-i.

בדפים המועברים ע"י שרת HTTP רצוי שסימון הקידוד יתבצע ברמת כותרי ה-HTTP. הסימון מתבצע ע"י הוספת הפרמטר charset לערך כותר content-type. למשל:

content-type: text/html;charset=iso-8859-8-i

או:

content-type: text/html;charset=windows-1255

בדפים שאינם ברשת, או שמסיבה כלשהי לא ניתן לספק את כותר ה-HTTP הרצוי ניתן לסמן את הקידוד ב-HTML ע"י התגית meta התגית הזאת חייבת להיות הראשונה בתגית head, על מנת להבטיח עיבוד נכון של כל הטקסט (כולל כותרת המסמך). למשל:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
       "http://www.w3.org/TR/REC-html40/strict.dtd">
<html dir="rtl">
<head>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-8-i">
<title>שלום עולם</title>
</head>

ב-XHTML, כמו בכל מסמך XML, ישנה חובה לסמן את הקידוד במסמך עצמו, אפילו אם סומן בכותר HTTP, בהצהרת ה-XML:

<?xml version="1.0" encoding="windows-1255" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html dir="rtl">
<head>
<title>שלום עולם</title>
</head>

אופן הכתיבה

העיקרון הלוגי

העיקרון היסודי בכתיבת עברית לוגית הוא שכל הטקסט כתוב בסדר הקלדתו הטבעית, ואילו התוכנה המציגה את הטקסט מציגה אותו כמקובל.

בכל מסמך מבחינים בין שתי רמות. רמת הפסקאות ורמת הטקסט. רמת הפסקאות כוללת יישור לצד הנכון (לימין בפסקה עברית או ערבית, ולשמאל בפסקה אנגלית או רוסית), מיקום סמני רשימות בצד הנכון, סידור תאים בטבלה בסדר הנכון. כמו כן, הכיווניות ברמת הפסקה קובעת את הכיווניות של טקסט ניטרלי בתוך הפסקה, כגון סימני פיסוק. ב-HTML יש לסמן את הכיווניות ברמת הפסקאות באופן מפורש, כפי שנראה עוד מעט.

ברמת הטקסט ההצגה הנכונה מתבצעת בדרך כלל ע"י ניתוח המאפינים של התוים ע"י התוכנה המציגה, ללא כל הכוונה של הסימון במסמך. כך שאם בפסקה בעברית יש ביטוי בצרפתית, אין צורך לסמן את הקטע הלועזי בצורה כלשהי. עצם העובדה שצרפתית כתובה באותיות לטיניות תגרום לכך שאותיות המילים בצרפתית וסדר המילים בצרפתית יוצגו משמאל לימין, למרות שכיווניות הפסקה היא מימין לשמאל. ישנם מקרים מעטים שבהם יש צורך להוסיף סימון מפורש לכיווניות בתוך פסקה.

סימון כיווניות ב-HTML ברמת הפסקאות

ב-HTML יש לסמן במפורש את הכיווניות ברמת הפסקאות. הסימון נעשה ע"י המאפין dir שניתן לציינו לכל תגית ברמת הפסקאות. הכיווניות עוברת בירושה לתגיות ברמת הפסקאות המקוננות בתגית המסומנת. למשל סימון התגית html כמימין לשמאל, תיוורש לכל המסמך. ניתן לשנות את הכיווניות של תגית מסוימת ע"י סימון מפורש בתגית האמורה. למשל אם יש חלק במסמך עברי שהוא באנגלית, ניתן לכלול את החלק האנגלי בתגית div המסומנת משמאל לימין, וכל הפסקאות בה יהיו משמאל לימין ללא סימון נוסף:

<html dir="rtl">
...
<p>פסקה מימין לשמאל</p>
<div dir="ltr">
<p>This paragraph is left to right</p>
</div>
</html>

הכותרים h1 עד h6, וכן חלקים div, ופסקאות p, אינם דורשים שום סימון מיוחד מעבר לסימון הכיווניות. בפרט אין צורך ליישר אותם לימין ע"י השימוש במאפין align. היישור הנכון יתבצע כאמור מתוקף סימון הכיווניות.

רשימה המסומנת ע"י ul,‏ ol, או dl ופריטי הרשימה בתוכה המסומנים ע"י li,‏ dt, או dd צריכים שיהיו באותה כיווניות. הטעם לכך הוא טיפוגרפי-אסתטי ולא מתוקף התקן.

כיווניות הטבלה table קובעת את סדר התאים בשורות. סימון הכיווניות בתגיות בתוך הטבלה כגון tbody או tr, ישפיע רק על כיווניות הטקסט הניטרלי בתוך התגית, ולא יהפוך את סדר התאים בשורות.

במסמכים שהם מימין לשמאל רצוי שגם הטבלאות יהיו כאלה. לא רק שזה מפשט את הסימון, זה גם מבטיח שהתאים יוצגו בסדר הרצוי בדפדפנים שמציגים את תאי הטבלה זה אחר זה, כגון דפדפני קול או ברייל בשימוש לקויי ראיה.

סימון הכיווניות ברמת הטקסט

כאמור, בדרך כלל אין צורך בסימון ברמת הטקסט. יחד עם זאת, ישנם מקרים שהאלגוריתם להצגת טקסט דו-כיווני לא נותן תוצאה רצויה.

מקרה אחד הוא שיש בפסקה כמה ביטויים בשפות שונות המקוננים זה בזה. כפי שאמרנו, אם יש, למשל, ביטוי בצרפתית בתוך פסקה בעברית, הדפדפן יידע להציג את הטקסט כראוי.

ומה יקרה כאשר באמצע הביטוי בצרפתית יש ביטוי ביידיש? אם לא נסמן דבר, הדפדפן יתנהג כאילו יש לנו שני ביטויים בצרפתית המופרדים בביטוי עברי. הסדר ישתבש, כי חלקו הראשון של הביטוי הצרפתי יוצג מימין לביטוי ביידיש, והביטוי ביידיש יוצג מימין לחלק האחרון של הביטוי בצרפתית. לעומת זאת, התצוגה הנכונה היא ששלושת חלקי הביטוי מוצגים כביטוי אחד משמאל לימין (דהינו בסדר הפוך ממה שהוצגו).

כדי לפתור בעיה זו מסמנים בתוך הפסקה תגית כלשהי ברמת הטקסט (למשל בתגית span או בתגית אחרת המתאימה לפי הענין) את הביטוי הצרפתי כולו עם המאפין dir בערך ltr.

סימון שגוי (האותיות מוצגות משמאל לימין לפי סדר אחסונן בקובץ):

<p dir="rtl">בלה בלה בלה <i>Qua1 qua1 אוי ויי qua2 qua2</i> בלה בלה בלה</p>

שנראה כך:

בלה בלה בלה Qua1 qua1 אוי ויי qua2 qua2 בלה בלה בלה

סימון נכון (האותיות מוצגות משמאל לימין לפי סדר אחסונן בקובץ):

<p dir="rtl">בלה בלה בלה
 <i dir="ltr">Qua1 qua1 אוי ויי qua2 qua2</i> בלה בלה בלה</p>

שנראה כך:

בלה בלה בלה Qua1 qua1 אוי ויי qua2 qua2 בלה בלה בלה

סוג אחר של מקרים כאלה הוא במילים הכוללות עירוב של אותיות, מספרים ותוים מיוחדים. דוגמא נפוצה היא מספר טלפון שחלקיו מופרדים במקפים. הספרות בכל חלק יסודרו כראוי משמאל לימין, אך סדר החלקים יהיה מימין לשמאל. כדי להיחלץ מבעיות כאלה ניתן לסמן שבמקטע טקסט כל התוים מסודרים בסדר קבוע (משמאל לימין או מימין לשמאל) ללא התחשבות בסידור "הטבעי" שלהם.

ב-HTML מסמנים מקטע כזה ע"י התגית bdo עם המאפין dir. כך שמספר טלפון יסומן כך:
<bdo dir="ltr">03-4444442</bdo>

המיוחד בתגית bdo הוא שהיא איננה מסמנת את הכיווניות הבסיסית של הטקסט, אלא מבטלת לחלוטין את ההתחשבות בסוג התוים, וקביעת הסדר לפי סיווגם, ואומרת לדפדפן להציג את תוכן התגית בסדר מוחלט לפי המאפין dir.

שאלות נפוצות

האם מסמך המקודד ב-iso-8859-8 הוא בעברית ויזואלית?

לאו דוקא. הקידוד הוא התאמה בין הבתים בקובץ לתוים. הוא איננו מעיד על שיטת הכתיבה. ב-HTML חובה על הדפדפן לפעול בהנחה שהמסמך כתוב בעברית לוגית.

על מנת לכתוב בעברית ויזואלית חובה להכריח את הדפדפן להתעלם מהכיווניות הטבעית של התוים ע"י שימוש בתגית bdo.

האם עברית לוגית היא קפריזה של מיקרוסופט, ולכן איננה נתמכת בדפדפנים שאינם מתוצרתה?

לא. עברית לוגית היא תקן בינלאומי. כמו כן, הדפדפן נטסקייפ החל מגרסה 6.1 תומך בעברית לוגית.

בהעתקת טקסט ממעבד התמלילים וורד, חלק המילים מתבלבלות. מדוע?

הדבר תלוי במספר גורמים. במערכות הפעלה לפני חלונות 2000 אופן הניתוח של התוים להצגה של טקסט דו-כיווני שונה במקצת מאשר בתקן יוניקוד. הדבר בא לידי ביטוי בעיקר במספרי טלפון. הפתרון מוסבר לעיל.

תקלה נפוצה אחרת היא שסוגריים נראים הפוכים. הסיבה לכך היא שגיאה של מי שהקליד את הקובץ. אין תוים "סוגר ימיני" ו-"סוגר שמאלי", יש תוים "פתח סוגריים" ו-"סגור סוגריים". התו "פתח סוגריים" מוצג ע"י גופן "סוגר ימיני" כאשר הכיווניות היא מימין לשמאל, וע"י גופן "סוגר שמאלי" כאשר הכיווניות היא משמאל לימין.

כאשר מקלידים מסמך עברי בוורד, וכוללים ביטוי באנגלית בסוגריים יש להקפיד לכתוב את הסוגריים כאשר המקלדת במצב עברית. הנטיה הטבעית של רוב הקלדנים היא להפוך את מצב המקלדת רק כשאין ברירה. זה גורם לכך שה-"פתח סוגריים" נכתב במצב עברית, ואילו במקום לסיים ב-"סגור סוגריים" מקישים על "סוגר שמאלי" כשהמקלדת במצב אנגלית, דהיינו כותבים "פתח סוגריים" נוסף! זה גורם לכך שהדפדפן מציג, ובצדק, שני סוגרים ימיניים.

האם ניתן להשתמש בקידודים אחרים כגון UTF-8?

כן, בהחלט. ניתן להשתמש בכתיבת עברית בכל קידוד שהוא. החיסרון בשימוש ב-UTF-8 או ב-UTF-16 הוא שהקבצים הנכתבים הם גדולים יותר וייקח להם יותר זמן להיטען בדפדפן. מצד שני אלו הם הקידודים המועדפים מבחינת תקן יוניקוד. אם כולם ישתמשו בהם לכתיבת כל השפות, ניתן יהיה לוותר על הצורך של דפדפנים ומחשבים להחזיק במאות של לוחות קידוד כפי שהם נאלצים לעשות היום.