h1> קידוד UTF-8 במפגש עם הבראוזר
לאחר שהבנו בפרק הקודם מהו קידוד UTF-8 , ננסה להסביר כיצד יודעת האפליקציה שקוראת את הדף במחשב המשתמש (כלומר הבראוזר) באיזה קידוד הדף שקיבל וכיצד עליו להציג אותו.
(הפרק הקודם - כאן :http://www.joomla.co.il/component/option,com_smf/Itemid,34/topic,3183.msg9495#msg9495 )
נתחיל במקרה המצוי והגרוע – גלשתם לאתר מסוים, ציפיתם למצוא דף בעברית וקיבלתם גיבריש וקשקושים.
מה קרה? – הבראוזר לא זיהה את קידוד הדף והציג אותו בקידוד הלא נכון. בבראוזרים המצויים ישנו בתפריט VIEW מקום המאפשר לסדר את הקידוד ולאחר משחק קצר בין האפשרויות השונות תוכלו לצפות בדף בצורתו העברית.
מדוע זה קרה?
התשובה מורכבת מהרבה אפשרויות, ננסה להסביר בקיצור את המקומות בהם עלולה התקשרות בין השרת ללקוח להשתבש ולגרום לפענוח מוטעה של הדף. נתחיל בהסבר היכן נקבע הקידוד, נמשיך לאפשרויות בהן יש סתירה בין הגדרות ונסיים בניתוח שגעונות של קליינטים חריגים (אחד חריג במיוחד...)
<
היכן נקבע הקידוד:
הקידוד נקבע במקום אחד, ויש שלשה מקומות בהם ניתן להודיע לקליינט מהו הקידוד שנקבע.
המקום הראשון – קביעת הקידוד ביצירת הקובץ
כתיבת החומר בקידוד מסוים. זהו מצב היסוד בו השרת שולף קובץ בקידוד מסוים ומשליך אותו למשתמש, או המשתמש ממלא טופס בבראוזר ולחוץ על כפתור ושולח אותו לשרת. זהו המקום בו נקבע הקידוד – אם הקובץ מקודד UTF-8 בשרת, או אם הבראוזר של הקליינט מכוון לתצוגת UTF-8 והקליינט מילא טקסטים בטופס ושלח אותו, אפשר לומר שעבור השרת והקליינט הטקסט "נוצר" או "מצוי" במצב קידוד זה. (לא נדבר כאן על שליפת מידע מבסיס נתונים, על כך בפרק הבא).
המקום השני – http header
כל קובץ שעובר באינטרנט בין השרת והלקוח, נושא עמו קובץ נלווה המתאר את אופיו ותוכנו. זה כמו כתובת על מעטפה שאומרת מה אמורים לעשות איתה. במשל זה דף ה HTML נמצא בתוך המעטפה. קובץ נלווה זה נקרא HTTP HEADER (לא לבלבל עם תג ה HEAD ב HTML , זהו תג שכתוב כבר בתוך קובץ התוכן, במשל שלנו בדף שבתוך המעטפה) . מה יש בקובץ הזה? - כל מיני סוגי מידע על האפליקציה השולחת ועל הקובץ הנשלח. דוגמא של קובץ כזה שלקחנו מאתר של w3.org :
HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Content-Location: CSS2-REC.en.html Vary:
negotiate,accept-language,accept-charset TCN: choice P3P:
policyref=http://www.w3.org/2001/05/P3P/p3p.xml
Cache-Control: max-age=21600 Expires: Wed, 05 Nov 2003 16:46:04 GMT
Last-Modified: Tue, 12 May 1998 22:18:49 GMT ETag: "3558cac9;36f99e2b"
Accept-Ranges: bytes
Content-Length: 10734 Connection: close
Content-Type: text/html; charset=utf-8 Content-Language: en[/left]
שימו לב לשורה המסומנת בקו תחתון, השורה החשובה מבחינתנו – זהו המקום הראשון בו לומד המקבל על סוג הקובץ המגיע אליו וכיצד לפתוח אותו.
מי שולט על תוכן הקובץ הזה והשורה הזאת?
בד"כ, שרת האינטרנט וקובץ ההגדרות שלו.
בהרבה מקרים, בגלל התקנות של שרתי האינטרנט ( Apache, IIS ) ההדר הזה (טוב התכוונתי ל header , קשה בלי ניקוד, אולי נאמץ מהיידיש את השימוש באות "ע" כצירה ונכתוב "העדר" , לא זה מבלבל, אולי "העדער" ...) אז הקובץ הזה מכיל הפניה לקידוד אחר או הקידוד ברירת המחדל iso -8859-1 ואז נוצרת בעיה.
איך פותרים בעיות עם header ?
אפשרות אחת – בשינוי ההגדרות בשרת :
אם יש לכם גישה לקבצי ההגדרות של השרת, אתם יכולים לשנות את הקידוד של כל הדר של כל קובץ שהשרת שולח.
אם אתם משתמשים בשרת אפצ'י, (ואם לא אז מה יש לכם לעשות עם ג'ומלה?) יש תקווה גם אם אין לכם גישה לקבצי ההגדרות, עדיין יש אפשרות לשנות את הגדרות השרת דרך עריכת קבצי ה htaccess בספריה שלכם. אפשרות זו תעבוד רק אם בקובץ ההגדרות הראשי בשרת קבעו את ההרשאה AllowOveride All המאפשרת השלטה של פקודות קונפיגורציה מתוך קבצי htaccess על הקונפיגורציה הכללית שבשרת. חשוב לציין שרישום בקובץ htaccess יחול על הספריה בה הוא נמצא וכל הספריות שתחתיה, אלא אם כן הוספתם קובץ נוסף מסוג זה לאחת הספריות.
מה להוסיף ב htaccess ?
אם אתם רוצים שקבצים בסיומת php יישלחו עם header כדלעיל, תוסיפו את השורה הבאה:
AddCharset UTF-8 .php
אם אתם רוצים גם html הוסיפו באותה שורה גם את הסיומת הזו.
אם אתם רוצים שקובץ מסוים יישלח ולא כל הספריה, תכתבו כך:
AddCharset UTF-8 .html
כתיבת header ב php
אם לא הולך לכם עם htaccess , יש עוד אפשרויות נוספות, והטובה שבהן היא שימוש ב php :
יש ב php פקודה מועילה שמאפשרת לכתוב ל header , אך היא חייבת להיות הראשונה בדף, לפני כל תג html או xml . וכך תיראה הפקודה שתיצור את ההדר המבוקש לאותו הקובץ:
המקום השלישי – הכרזת xml
שפת html היא ילד קטן של משפחת xml הגדולה. כותבים רבים רוצים לנצל את האפשרויות שמציע xml , ולכן כותבים בראש הדפים הכרזת xml שמשמעותה שהבראוזר ידע שהקובץ צריך להיקרא כקובץ xml .
ההכרזה הזו מופיעה בראשית הקובץ, מחוץ לתג הראשי של html , ונראית כך:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
ביחד עם הכרזה זו, אנו מודיעים בשפת xml מה הקידוד של הקובץ (לפני ההכרזה) ומה תבנית ה xml שלו (אחרי ההכרזה) והכל ביחד נראה כך:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
תוצאת ההכלאה הזו בין html ו xml מכונה xhtml .
אם אתם משרתים דפים למשתמשים שקוראים אותם עם בראוזרים תקניים, מכאן ואילך הכל מסודר. אם איתרע מזלכם והמשתמשים שלכם נוהגים להשתמש בבראוזר לא תקני ובפרט ב IE6 - כאן נוצרת לכם בעיה, עליה נדון בפרק על שגעונות הבראוזרים.
המשך המאמר כאן:
http://gushetzion.net/index.php?option= ... &Itemid=25





