הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   שאלה על קידוד והמרה (https://hosts.co.il/forums/showthread.php?t=87932)

SniR-S 10-02-11 18:24

שאלה על קידוד והמרה
 
איזה קידוד זה ?
קוד:

öä"ì åáéèçåï
עריכה:
הינה תמונה כי המערכת מוציטה את זה בתווים אחרים לגמרי.
http://img97.imageshack.us/img97/7918/12122g.jpg

וע"י איזה פונקציה אני יכול להמיר אותו לעברית רגילה ב PHP ?

בניה 10-02-11 18:37

כנראה UTF8 או 16

BlueNosE 10-02-11 19:01

נסה iconv

SniR-S 10-02-11 19:53

מוזר לי לאללה, כי להמיר אפשר עם iconv,
אבל אין לי שמץ מאיזה קידוד להמיר...
באתר הזה http://www.pixiesoft.com/flip/
אני שם את התוכן והוא מחזיר לי את הפלט בעברית, בקידוד המתאים.
אבל אני צריך לבנות סקריפט שיעשה את זה
למסד עם המון רשומות..ככה שלעשות אחד אחד זה יהיה לא רלוונטי.

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

BlueNosE 10-02-11 21:30

בדקת UTF-8 ו16?

SniR-S 11-02-11 06:42

כן...

בניה 11-02-11 09:30

שמור את זה בקובץ טקסט ותן אליו קישור.

SniR-S 11-02-11 14:05

http://share-il.com/file/6809/text-txt.html

בניה 11-02-11 15:48

הוא קודד פעמיים בUTF8 וכנראה גם לשפה לא נכונה.
זה מחזיר אותו לעברית ב windws-1255:
PHP קוד:

<?php
$a 
'ֳƒֲ¶ֳƒֲ₪"ֳƒֲ¬ ֳƒֲ¥ֳƒֲ¡ֳƒֲ©ֳƒֲ¨ֳƒֲ§ֳƒֲ¥ֳƒֲ¯';
$a iconv('UTF-8''ISO-8859-1'$a);
$a iconv('UTF-8''ISO-8859-1'$a);
echo 
$a;
?>

עריכה:הפורום מתעסק עם קידודים, פשוט תכניס את המידע ב$a

SniR-S 11-02-11 17:59

הצלחתי לעשות את זה עם מה שאמרת, אני מצליח לקבל את המידע בצורה המתאימה שאני רוצה.
זאת אומרת בקידוד עברי כמו שאתה אומר.. ISO-8859-1
הבעיה היא שאני אמור להכניס את זה למסד אחרי כל זה, זאת אומרת
לאחר ההמרה הטקסט אמור להיכנס למסד כ UTF-8,
עכשיו במידה ויש 2 המרות כמו שעשינו, אז הטקסט שנכנס למסד הוא ריק.
ובמידה ויש רק המרה אחת, נכנס טקסט אחר גם כן.
טקסט כזה:
PHP קוד:

$a "äøöç äëôåì á÷øéé"

ואם אני לוקח את הטקסט הזה וממיר אותו שוב פעם מ UTF-8
ל ISO-8859-1 הוא שוב פעם נעלם ומוציא פלט ריק.

כמובן אנחנו מדברים על תוכן בעברית.
יכול להיות שהטקסט הזה הוא כבר המרה אחרת ? \:

בניה 12-02-11 09:56

אחרי המרות שאתה עושה תגדיר את התאים במסד כ hebrew_general_ci
ותריץ set names hebrew

SniR-S 12-02-11 13:17

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

הסקריפט הוא להמרת הכותרות של הנושאים מהמערכת VBULLETIN ל PHPBB3
אני כמעט בטוח שזה עובד על כל גירסאות ה VB, אני בטוח שעל 4 ו 3 זה עובד.
מה שהסקריפט עושה בעצם, הוא שולף את הכותרת וה ID מהטבלה של הנושאים במערכת VB
ומעדכן את הכותרת לפי ה ID של הנושא בטבלת הנושאים של המערכת PHPBB3
כמובן, זה רק לאחר ביצוע המרה של המערכת VB ל PHPBB3.
אז מי שזה גם קורה לו שכותרות הנושאים לא הומרו כמו שצריך (אגב אצלי זה גם השמות פורומים, אבל גם אותם אני אשנה, ע"י שינוי קטן בסקריפט, מה שגם אתם יכולים לעשות),
אז הוא יכול להשתמש בסקריפט.

PHP קוד:

<html dir="rtl">
    <head>
        <title>SCRIPT CONVERT TOPICS, HEBREW - VBULLETIN TO PHPBB3</title>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1255" />
    </head>
<body>
<?php
$connection 
mysql_connect("localhost""NAME_USER_DB""PASSWORD_USER_DB");
    
$connect mysql_select_db("NAME_DB"$connection);
$utf8 mysql_query("SET NAMES 'latin1'");

    
$query_n mysql_query("SELECT `topic_id` FROM `phpbb_topics`") or die ("Query Faild:" mysql_error());
    
$number mysql_num_rows($query_n);

if (
$_GET['start'] >= $number) {
    echo 
"<br /><br />כל הרשומות הומרו.";
    echo 
"<meta http-equiv=\"refresh\" content=\"1;url=http://www.google.co.il\" />";
} elseif (isset(
$_GET['start']) && is_numeric($_GET['start'])) {
$start $_GET['start'];
$limited 500// מספר נושאים להמרה בכל 10 שניות
    
$query mysql_query("SELECT * FROM `thread` ORDER BY `threadid` LIMIT $start,$limited") or die ("Query Faild:" mysql_error());
        while (
$r mysql_fetch_assoc($query)) {
            
$id $r['threadid'];
            
$title $r['title'];

            echo 
$id " | " $title "<br />";
            
mysql_query("SET NAMES 'hebrew'");
            
mysql_query("UPDATE `phpbb_topics` SET `topic_title` = '$title' WHERE `topic_id` = '$id'");
        }
    
$to_start $start+$limited;
    echo 
"<br /><br />הרשומות מרשומה $start ועד הרשומה $to_start הומרו,הינך מועבר לרשומות הבאות.";
    echo 
"<meta http-equiv=\"refresh\" content=\"10;url=?start=$to_start\" />";
}

?>
</body>
</html>

צריך להכניס את פרטי המסד כמובן,
לפנות להפעלת הסקריפט פשוט להוסיף "?start=0" .. בכתובת..
ודבר שני זה שאתם יכולים לשנות את הסקריפט כרצונכם ולייעל אותו איך שבא לכם.
להוסיף, לערוך, לשנות ולשדרג, אני מקווה שהוא יעזור גם לאחרים, ובמידה
ומישהו יתקל בבעיה הזו שלי, הוא יוכל להיעזר בזה.


בכל מקרה חברים, תודה רבה לכל מי שעזר |לב|


כל הזמנים הם GMT +2. הזמן כעת הוא 03:16.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ