![]() |
# 1 |
חבר בקהילה
|
![]() אהלן,
אני עובד על מערכת ניהול תוכן המבוססת mySQL. עד היום עבדתי בקידוד windows-1255 ונטענו לתוכה לא מעט תכנים. כעת אני רוצה להסב את הסביבה ל- utf-8. הסבת הממשק עצמו קלה, הבעיה עם בסיס הנתונים עצמו ... נראה כי התכנים נשמרו בקידוד הישן ואם אני מציג אותם בדף המקודד utf-8 הם מוצגים כג'יבריש. האם נתקלתם בזה? האם יש דרך לבצע המרה אוטומטית?
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
![]() |
![]() |
# 2 |
משתמש - היכל התהילה
|
קודם כל, תגבה את כל מה שיש לך!
דרך הPHPMYADMIN בפעולות/operations אפשר להעתיק טבלה שלימה לטבלה חדשה בשניה. כך גם יהיה קל לשחזר. כדי להמיר אתה גם צריך לשנות את ההגדרות במסד עצמו(collation) לטבלה ולתאים. וגם את המידע עצמו. אני ממליץ לעשות את זה כך: ליצור טבלה באותו מבנה עם collation utf8_unicode_ci בשם utf8_tablename ליצור 2 חיבורים לMYSQL, אחד לטבלה הישנה ואחרי החיבור לישנה לשלוח שאילתה קוד:
"SET NAMES 'hebrew'" קוד:
"SET NAMES 'utf8'" קוד:
iconv("windows-1255", "UTF-8", $text);
__________________
קו ישר, כי אפשר גם אחרת |
![]() |
![]() |
# 3 |
חבר בקהילה
|
כבר כתבתי סקריפט PHP שעושה המרה בעזרת ICONV (אחרי ש-html_entity_decode גם לא עבד) באותה הטבלה וזה לא עבד:
$fieldsquery = "select * from ".$db.".".$table.""; $fields_result = mysql_query($fieldsquery); $num_fields = mysql_num_fields($fields_result); for ($j = 0; $j < $num_fields ; $j++) { $column = mysql_field_name($fields_result, $j); $query = "select ".$column." from ".$db.".".$table.""; $result = mysql_query($query); $num_result = mysql_num_rows($result); for ($i = 0; $i < $num_result; $i++) { $thing1 = mysql_result($result,$i); echo $thing1.'<br>'; //$thing2 = html_entity_decode($thing1, ENT_QUOTES, 'utf-8'); $things2 = iconv("windows-1255", "UTF-8", $thing1); echo '<br>'.$thing2.'<br>'; $queryreplace = "update ".$db.".".$table." set ".$column." = '".$thing2."' where ".$column." = '".$thing1."'"; echo $queryreplace."<br>"; mysql_query($queryreplace); } ... מה המשמעות של SET NAMES לקידוד? היכן זה אמרו להכנס?
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
![]() |
![]() |
# 4 |
משתמש - היכל התהילה
|
ה SET NAMES זו שאילתה שקובעת את הקידוד של החיבור שלך עם המסד נתונים.
אם הקידוד של החיבור הוא latin1 ואתה מנסה להעביר UTF8 או ההפך אתה עלול לקבל סימני שאלה/גי'בריש. וגם אתה חייב שהcollation במסד יוגדר כמו שצריך לפני שאתה מכניס אליו מידע בUTF8. קוד שעבד לי: PHP קוד:
__________________
קו ישר, כי אפשר גם אחרת |
![]() |
![]() |
# 5 |
חבר בקהילה
|
היי,
יש בעיה, אחרי שהגדרתי שם-משתמש\סיסמא שהיו חסרים ... הוא לא יודע מה זו הטבלה החדשה שהגדרת ... וגם לי לא ברור: PHP קוד:
א. הוספתי טבלה זמנית, כדי לראות אם זה עובד - לא. ב. האם כדאי לשנות את הגדרת קידוד טבלת היעד ל-UTF-8?
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית Last edited by ahoy; 07-03-08 at 16:58.. |
![]() |
![]() |
# 6 |
משתמש - היכל התהילה
|
כן, צריך ליצור טבלה חדשה בשם
new_tablname וכל ה collation בכל מקום שיהיו utf8_unicode_ci
__________________
קו ישר, כי אפשר גם אחרת |
![]() |
![]() |
# 7 |
חבר בקהילה
|
מאיזו סיבה זה לא עובד - כלומר זה ממיר אבל לקידוד לא ברור.
הסבתי את טבלת היעד ל-utf8_unicode_ci וגם את שדות טקסט היעד ... מה עוד יכול להיות בדרך?
__________________
Ahoy - אופקים חדשים באינטרנט אסטרטגיית אינטרנט | קניית דומיין | קולנוע ישראלי | מאמרים ודעות | מערכת ניהול תוכן בעברית |
![]() |
![]() |
# 8 | |
משתמש - היכל התהילה
|
ציטוט:
יכול להיות שכשאתה שולף את הנתונים אחרי ההמרה, הקידוד של השליפה לא טוב? אם תוכל שלח לי עותק של הטבלה, אפילו רק עם שורה אחת ואני אנסה לבדוק את זה.
__________________
קו ישר, כי אפשר גם אחרת |
|
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|