מדריך PHP

מדריך PHP: עברית ב-PHP

‏ • Internet Israel

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

הבנת הקידוד דורשת קצת (אבל ממש קצת) דיון תיאורטי בנושא קידוד. כאשר אנו כותבים משהו במחשב, למשל HELLO, המחרוזת הזו מתרגמת ל-0 ול-1, הקוד הבינארי הנמצא בבסיסו של המחשב. בשנת 1963 התכנס מי שהתכנס והכריזו על קידוד ASCII – תקן מקובל על כולם, כך לצורך העניין האות A שווה בתקן למספר 64 וכך הלאה. מה הבעיה? הבעיה שבשנת 1963 לא חשבו לצורך העניין שאולי יהיה מי שירצה לכתוב בעברית או ברוסית או באמהרית. מה עושים? הוסיפו לתקן ASCII הרחבות. כמו למשל הרחבה עברית – כך מי שהתקין את ההרחבה היה יכול לקרוא עברית ולכתוב בעברית. אם לא היתה לך את ההרחבה, היתה לך בעסה רצינית. וגם היו כמה סוגי הרחבות. כך למשל יש לנו את הרחבת ISO-VISUAL שותיקי האינטרנט זוכרים בתור הקידוד שבשבילו היה צריך להפוך את האותיות (אבל היה סטנדרט באינטרנט מתישהו בשנות ה-90). ההרחבות שהתקבעו מתישהו כסטנדרט עד היום הם הרחבת ISO-LOGICAL ו-WINDOWS HEBREW (שהן כמעט זהות אלמלא נושא הניקוד). התקן האנגלי + ההרחבה המקובלת היא WINDOWS 1252 המפורסם. אם אתם עובדים על מחשב מבוסס חלונות – כל הקבצים שתיצרו יהיו בקידוד windows-1252.

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

על מנת שהדף יוצג כראוי, הקידוד שבו אנו יוצרים את הקובץ (הפלט שלנו) והקידוד שבו אנו מציגים את הקובץ (נקבע באמצעות תגית meta) צריך להיות זהה. זה לא משנה באיזה תקן קידוד אנו משתמשים. בין אם מדובר בתקן Windows -1255 או utf-8.

קביעת הפלט

Webmatrix, נכון להיום, יוצר קבצים בקידוד UTF-8. אם ניצור קובץ PHP הוא יהיה בקידוד UTF-8, אם ניצור קובץ HTML ונקפיד שתהיה לו את התגית:

<meta charset="utf-8" />

אין לנו שום מניעה להדפיס בעברית. אתם מוזמנים לנסות.

מה שחשוב הוא, להתאים הן את קידוד מסד הנתונים והן את תגית ה-meta tag לתקן שבו יצרנו את הקובץ. כפי שציינתי, עם WebMatrix הקידוד היחיד האפשרי הוא UTF-8. ולפיכך עלינו להקפיד שבקובץ ה-HTML שמציג את הפלט וכן בקובץ ה-HTML שמכיל את הטופס ששולח את הנתונים תהיה את התגית:

<meta charset="utf-8" />

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

מה אפשר לעשות? יש שתי אפשרויות – הראשונה היא לדאוג שהדף שמכיל את הטופס יהיה מקודד ב-UTF-8 ולא בקידוד אחר. השניה היא לקחת את הקלט המתקבל מהטופס ולהמיר אותו ל-UTF-8.

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

$my_var =  iconv('Windows-1255', 'UTF-8', $my_var);

כפי שראיתם, העניין של העברית הוא מעט מסובך. הוא תלוי בעיקר בעורך הטקסט שאיתו אנו עובדים – למרות שגם אם אנו עובדים עם עורך שתומך ב-UTF-8 או ב-Windows-1255 יש דרך לעקוף את זה עם פונקצית iconv ותלוי גם בתגית ה-meta. סביר להניח שבתחילת הדרך המקצועית שלכם אתם תסתבכו עם נושא העברית לא מעט, אך ככל שתפתחו מתודות עבודה סדורות וקבועות, כך הסיכוי שתתקלו בבעיה הוא נמוך. עבודה עם WebMatrix תבטיח שקט תעשייתי בכל נושא העברית.

תגיות: , ,

רן בר-זיק

מתכנת PHP מנוסה ובעל ידע רב בפיתוח לאינטרנט על בסיס LAMP. מומחה במערכות דרופל, ג'ומלה ו-וורדפרס. שולט היטב בכל מה שקשור לפרונט אנד: JavaScript: jQuery ו-MooTools,ActionScript 2/3 וכמובן HTML 5 + CSS 3.אינטרנט ישראל: www.internet-israel.com

תגובות בפייסבוק