לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 30-07-2009, 13:11
  aviD101 aviD101 אינו מחובר  
 
חבר מתאריך: 30.07.09
הודעות: 24
בתגובה להודעה מספר 2 שנכתבה על ידי dorM שמתחילה ב "מה הקידוד שהגדרת בצד לקוח..."

קידוד הדף הוא:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

זה ה System Variables:
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_results latin1
character_set_server latin1
character_set_system utf8
collation_connection latin1_swedish_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci





ניסתי להכניס את השורות :
default-character-set=utf8
default-collation=utf8_general_ci
בדף my.cnf או להריץ את הפקודה:
ALTER DATABASE ... DEFAULT CHARACTER SET utf8
אני עובד עם המערכת webmin ודרך הממשק הזה אני רואה את כל התווים האלו ללא בעיה.
כפי שציינתי, שתי המחרוזות(זו מה DB וזו שמתקבלת מהיוזר נראות זהות. רק כשאני מנסה להשוות ביניהן ע"י strcmp או mb_strstr , ורק במידה והן מכילות את אותם תווים מיוחדים - אני מקבל שהן לא שוות.

איך אני יכול לדעת מה ה- character-setשל מסד נתונים כלשהו?
כיצד אני משנה את System Variables באופן קבוע?

תודה!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 30-07-2009, 22:52
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 7 שנכתבה על ידי aviD101 שמתחילה ב "תודה רבה על הקישור..."

השאילתא SET NAMES אמורה להמיר קידוד של מידע יוצא ונכנס מהמסד בהתאם לקידוד שהגדרת בה.

לפי מה שציינת, ולפי הנתונים, אז המצב הוא כזה:

המידע שמגיע מהלקוח מקודד ב-UTF-8.
המידע שבמסד מקודד ב-latin1, שזה למעשה ANSI cp1252 (ראה כאן ). בקיצור זה לטינית ולא מה שאתה צריך.

לפי הכתוב בדוקו' של MySQL על קידודים, אך בניגוד להיגיון, המסד כנראה המיר את המידע הנכנס מ-utf8 ל- latin1.

זה בניגוד להיגיון, כיוון שה- system variables מכילים את המידע הבא, כפי שציינת:
קוד:
character_set_client latin1 character_set_connection latin1 character_set_database latin1 character_set_results latin1 character_set_server latin1 character_set_system utf8 collation_connection latin1_swedish_ci collation_database latin1_swedish_ci collation_server latin1_swedish_ci

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

קצת מוזר...

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

תראה מה תעשה:

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

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

אגב, האם דרך PHP אתה שולח כותר קידוד? לדוגמא:
קוד PHP:
 header('Content-type: text/html; charset=utf-8'); 

יש לשלוח את הכותר הזה בנוסף לתג meta שהגדרת.

אם תרצה להבין יותר על קידודים ו-collations, תקרא כאן. תפנה לך איזה יום...

עריכה:
דבר אחרון - כאשר אתה רואה שמחרוזת המקודדת ב-UTF-8 גדולה כמעט פי 2 ממחרוזת אחרת, וששני המחרוזות אמורות להיות שוות - סביר להניח שהמחרוזת האחרת מקודדת בקידוד single byte, וסביר להניח שבשתי המחרוזות יש תוי ASCII מלבד תוים שאינם ASCII (כלומר יש תוים משני הקבוצות).

נערך לאחרונה ע"י dorM בתאריך 30-07-2009 בשעה 22:55.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 15:41

הדף נוצר ב 0.04 שניות עם 11 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר