שלום
ראיתי שלהמון אנשים יש בעיה עם utf, במיוחד עם מסד, כולל אותי,
אז החלטתי לשבת על זה ולראות מה הפתרון.
בעיקרון מה שצריך לעשות זה 3 דברים עיקריים:
1) להמיר את קבצי הטקסט ל utf8 without BOM, אני ממליץ על notepad2.
2) לשים תג meta בדפי ה HTML שיגיד לדפדפן שזהו קובץ UTF8.
3) להמיר את כל המסד ל UTF8.
נעבור שלב שלב:
1) יש 2 סוגים של UTF8:
- UTF8 with BOM
- UTF8 without BOM
מהו בעצם ה BOM הזה ולמה הוא גורם?
ה BOM הוא ראשי תיבות של Bytes order mark, שהוא בפירוש לעברית "חותמת סדר ביטים", לא נכנס לזה יותר מדי, אבל אפשר להגיד שזה בעקרון מכניס לקובץ טקסט את הסדר ביטים בקובץ.
הדבר הזה גורם להוצאת פלט, וכך בעקיפין לבעיות עם headers (לדוגמא header already sent ב PHP).
notepad הרגיל שומר קבצי UTF עם BOM, ואין אפשרות ללא BOM.
בשביל שנוכל להמיר את הקובץ טקסט ללא BOM נצטרך תוכנת עריכת טקסט יותר מתקדמת, כאן אני ממליץ על notepad2.
המרה ל UTF without BOM ב notepad2:- File > Encoding > UTF8 > OK
- File > Save
הורדה ל notepad2: http://www.flos-freeware.ch/zip/notepad2.zip
2) זהו החלק הקל ביותר, להוסיף את הקוד הבא בין תגי head וגמרנו:
HTML קוד:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
3) זהו החלק הקשה, קודם כל צרו לכם רשימה של כל הטלבאות שברצונכם להמיר.
לכו ל phpmyadmin ואז תבחרו בטבלה שלכם ולחצו על SQL בתפריט למעלה.
קחו את השאילתא הבאה ושנו את USERNAME ל user_db, כאשר user הוא השם משתמש שלכם לאכסון, ו db הוא שם המשתמש למסד.
קוד:
ALTER DATABASE `USRENAME` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
אצלי השם משתמש באכסון הוא losnir והמסד הוא shell, לפיכך, השאילתא אצלי תיהיה כך:
קוד:
ALTER DATABASE `losnir_shell` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
עכשיו זוכרים שביקשתי מכם שתכינו רשימה של כל הטבלאות במסד? יופי, כי כאן נצטרך את אותה הרשימה.
קחו את השאילתא הבאה, ושכפלו אותה כמספר הטבלאות שלכם:
קוד:
ALTER TABLE `MYTBL` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
החליפו את MYTBL בשם הטבלה, וכל מה שקיבלת צרפו לקוד הקודם שהכנו.
לדוגמא, נגיד שיש לי 3 טבלאות: user, admin ו page, לפיכך, השאילתא
המלאה שלי תיהיה כך:
קוד:
ALTER DATABASE `losnir_shell` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `admin` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `user` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `page` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
העתיקו את הכל המלא שלכם לתיבת הטקסט ב phpmyadmin ולחצו על GO.
אוקיי כאן סיימנו הכל,
אבל נשאר עוד משהו!
מה שעשינו כאן בעצם, זה להמיר את כל הטבלה ל UTF8, אבל הבעיה היא שכל התוכן שכבר קיים
לא הופך ל UTF8.
ז"א, שנצטרך לאפס את כל הטבלאות שלנו ולהתחיל הכל מהתחלה.
אז לפני שאתם מתחילים לפתח מערכת כלשהי, תחשבו טוב טוב באיזה קידוד אתם הולכים להשתמש, כי הדרך חזרה תיהיה מפרכת וארוכה.
זהו כלל ברזל!
* אני כתבתי את המדריך, ואין להעתיקו ו/או לפרסמו בכל מקום אחר ללא אישור מצידי בתוספת קרדיט.
יום טוב,
ניר אזואלוס.