سوالف اندرويد




العودة   سوالف سوفت > سوالف برمجة المواقع وتطويرها > PHP
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
عضو نشيط جدا
#1  
الابقاء على البيانات بعد تحويلها الى utf8

السلام عليكم،

قمت بتعديل ترميز احدى قواعد البيانات من latin1 الى utf8.

كما قمت يتعديل ترميز الصفحات واضافة السطر :



كود PHP:
mysql_set_charset("utf8"




بعد عمل إتصال بالقاعدة.

وعند تجريب اضافة بيانات ياللغة العربية جديدة تظهر في القاعدة والمتصفح باللغة العربية بشكل ممتاز.

ولكن البيانات القديمة كلها اصبحت تظهر في المتصفح وحتى القاعدة بحروف غير مفهومة وبشكل معينات.

فهل من حل للابقاء على البيانات السابقة بدون تغيير بعد الانتقال من ترميز latin1 الى utf8 ؟

شكرا للمساعدة






الملفات المرفقة
نوع الملف: zip utf8.zip‏ (11.8 كيلوبايت, 31 مشاهدة)
__________________
مجلتي الصغيرة
apitos is offline   قديم 12-04-2011, 02:43 PM
الرد مع إقتباس
عضو سوبر نشيط
#2  

اذا كنت تستخدم ترميز أسكي ASCII سابقا لحفظ بياناتك على القاعدة، وقمت بتحويل بنية القاعدة إلى UTF8، فإن السيرفر سيبدأ بقراءة البيانات السابقة بترميز غير صحيح

الحل

ان تقوم بتحويل ترميز البيانات السابقة إلى UTF8

هذا سيحتاج إلى عمل برمجي من نوع ما
أعطيك مثال لحل مقترح
اقرأ البيانات من القاعدة بالترميز الأساسي Latin1، وقم بحفظها في مصفوفات
ثم قم بتحويل ترميز الاتصال بالقاعدة إلى UTF8
كود:
mysql_query("SET NAMES 'utf8' ");
ثم تقوم بعمل update للسجلات بالبيانات نفسها بالترميز الجديد

هذا حل مقترح، قم بتجربته






__________________
الخدمات البرمجية
تعديلات برمجية - تطوير برمجيات جاهزة - صيانة قواعد بيانات
برمجة خاصة (الأولوية للأفكار الجديدة والخاصة)

المراسلة : http://it.rewaq.com
القائد is offline   قديم 13-04-2011, 07:02 PM
الرد مع إقتباس
عضو نشيط جدا
#3  

حل القائد جيد لكن عندي حل شامل المشكل انك قمت تغير الترميز

فقط اعد تحميل قاعدة البيانات من غير تحويل الترميز إلي utf اي اتركه latin1

واستعمل هذا الفنكشن داخل ملف منفرد قم بمناداته من المستعرض سيقوم بتغير الترميز + تغير ترميز البيانات
إلي utf بشكل ممتاز
كود PHP:

<?php

function MysqlError()
{
        if (
mysql_errno())
        {
                echo 
"<b>Mysql Error: " mysql_error() . "</b>\n";
        }
}

$username "root";
$password "pass";
$db "yourdata";
$host "localhost";

$target_charset "utf8";
$target_collate "utf8_general_ci";

//$target_charset = "";
//$target_collate = "";

echo "<pre>";

$conn mysql_connect($host$username$password);
mysql_select_db($db$conn);

$tabs = array();
$res mysql_query("SHOW TABLES");
MysqlError();
while ((
$row mysql_fetch_row($res)) != null)
{
        
$tabs[] = $row[0];
}

// now, fix tables
foreach ($tabs as $tab)
{
        
$res mysql_query("show index from {$tab}");
        
MysqlError();
        
$indicies = array();

        while ((
$row mysql_fetch_array($res)) != null)
        {
                if (
$row[2] != "PRIMARY")
                {
                        
$indicies[] = array("name" => $row[2], "unique" => !($row[1] == "1"), "col" => $row[4]);
                        
mysql_query("ALTER TABLE {$tab} DROP INDEX {$row[2]}");
                        
MysqlError();
                        echo 
"Dropped index {$row[2]}. Unique: {$row[1]}\n";
                }
        }

        
$res mysql_query("DESCRIBE {$tab}");
        
MysqlError();
        while ((
$row mysql_fetch_array($res)) != null)
        {
                
$name $row[0];
                
$type $row[1];
                
$set false;
                if (
preg_match("/^varchar\((\d+)\)$/i"$type$mat))
                {
                        
$size $mat[1];
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARBINARY({$size})");
                        
MysqlError();
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR({$size}) CHARACTER SET {$target_charset}");
                        
MysqlError();
                        
$set true;

                        echo 
"Altered field {$name} on {$tab} from type {$type}\n";
                }
                else if (!
strcasecmp($type"CHAR"))
                {
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} BINARY(1)");
                        
MysqlError();
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} VARCHAR(1) CHARACTER SET {$target_charset}");
                        
MysqlError();
                        
$set true;

                        echo 
"Altered field {$name} on {$tab} from type {$type}\n";
                }
                else if (!
strcasecmp($type"TINYTEXT"))
                {
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYBLOB");
                        
MysqlError();
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} TINYTEXT CHARACTER SET {$target_charset}");
                        
MysqlError();
                        
$set true;

                        echo 
"Altered field {$name} on {$tab} from type {$type}\n";
                }
                else if (!
strcasecmp($type"MEDIUMTEXT"))
                {
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMBLOB");
                        
MysqlError();
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} MEDIUMTEXT CHARACTER SET {$target_charset}");
                        
MysqlError();
                        
$set true;

                        echo 
"Altered field {$name} on {$tab} from type {$type}\n";
                }
                else if (!
strcasecmp($type"LONGTEXT"))
                {
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGBLOB");
                        
MysqlError();
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} LONGTEXT CHARACTER SET {$target_charset}");
                        
MysqlError();
                        
$set true;

                        echo 
"Altered field {$name} on {$tab} from type {$type}\n";
                }
                else if (!
strcasecmp($type"TEXT"))
                {
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} BLOB");
                        
MysqlError();
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} TEXT CHARACTER SET {$target_charset}");
                        
MysqlError();
                        
$set true;

                        echo 
"Altered field {$name} on {$tab} from type {$type}\n";
                }

                if (
$set)
                        
mysql_query("ALTER TABLE {$tab} MODIFY {$name} COLLATE {$target_collate}");
        }

        
// re-build indicies..
        
foreach ($indicies as $index)
        {
                if (
$index["unique"])
                {
                        
mysql_query("CREATE UNIQUE INDEX {$index["name"]} ON {$tab} ({$index["col"]})");
                        
MysqlError();
                }
                else
                {
                        
mysql_query("CREATE INDEX {$index["name"]} ON {$tab} ({$index["col"]})");
                        
MysqlError();
                }

                echo 
"Created index {$index["name"]} on {$tab}. Unique: {$index["unique"]}\n";
        }

        
// set default collate
        
mysql_query("ALTER TABLE {$tab}  DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}");
}

// set database charset
mysql_query("ALTER DATABASE {$db} DEFAULT CHARACTER SET {$target_charset} COLLATE {$target_collate}");

mysql_close($conn);
echo 
"</pre>";
لا تنسي إضافة لملف الإتصال عندك
كود PHP:

 
@mysql_set_charset('utf8');
      @
mysql_query('SET NAMES utf8');
      @
mysql_query('SET CHARACTER SET utf8');
      @
mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"'); 

بالطبع يبقي عمل النسخ لقاعدة البيانات والزرع مرة اخري

إستعمل هذا السكريبت الممتاز في نسخ قواعد البيانات وإعادة الزرع عند الحاجة من هنا


http://sypex.net/files/SypexDumper_208.zip


هذا إن شاء الله الحل النهائي لترميز قواعد البيانات انشروا هذه الصفحة للإستفادة

وموفقين إن شاء الله







آخر تعديل بواسطة zamile28 في 13-04-2011 الساعة 08:30 PM.
zamile28 is offline   قديم 13-04-2011, 08:27 PM
الرد مع إقتباس
عضو نشيط جدا
#4  

من خلال الملفات المرفقة اقوم يثلاث خطوات :

1 - استرجاع البيانات عن طريق الملف get_datas.php وحفظها في ملف update.sql.

2 - تحديث وتغيير ترميز القاعدة من latin1 الى UTF8 عن طريق الملف update_encoding.php

3 - اعادة ادخال البيانات الى القاعدة بالترميز الجديد عن طريق الملف update_datas.php.

ولكن المشكلة ما زالت قائمة والبانات كما استرجعها من latin1 اجد نفسها بالقاعدة تحت ترميز UTF8.

هناك مشكل ما من الترميز حتماً.






__________________
مجلتي الصغيرة
apitos is offline   قديم 13-04-2011, 08:32 PM
الرد مع إقتباس
عضو نشيط جدا
#5  

لم ار اجابتك اخي زميل.

فعلا استعملت يدويا في PHPMyadmin طريقتك لاني وجدتها مذكورة في الوورد برس.

http://codex.wordpress.org/User:Jere...UTF8Conversion

ولم تفلح معي.

ولكن ساعيد تجريتها مرة ثانية ان شاء الله.






__________________
مجلتي الصغيرة
apitos is offline   قديم 14-04-2011, 01:04 PM
الرد مع إقتباس
عضو نشيط جدا
#6  

كيف يعمل هذا السكريبت ؟

http://sypex.net/files/SypexDumper_208.zip






__________________
مجلتي الصغيرة
apitos is offline   قديم 14-04-2011, 01:36 PM
الرد مع إقتباس
عضو نشيط جدا
#7  

الفنكشن الذي اعطيتك فوق يعمل بشكل ممتاز ومجرب

سبب فشل المحاولة الاولي لان قلت لك لا تغير الترميز حتي يتمكن السكريبت من العمل

يغير الترميز + تحويل البيانات utf

مرة واحدة وبسرعة


هذا ملف اللغة العربية لسكريبت نسخ وزرع قواعد البيانات اعلي

http://sypex.net/files/sxd2_lang_ar_by_Reko24.zip

اما إذا اردت مثل ماقال القائد

أعطيك مثال لحل مقترح
اقرأ البيانات من القاعدة بالترميز الأساسي Latin1، وقم بحفظها في مصفوفات
ثم قم بتحويل ترميز الاتصال بالقاعدة إلى UTF8

تفضل هذه هي الطريقة الصحيحة اجلب البيانات حولها لutf ب iconv

ثم اعد زرعاتها

إليك سكربيتك مع التعديل
كود PHP:

<?php
 header
('(anti-spam-content-type:) text/html; charset=utf-8' );
$sql_text="";
$sql="select * from tab1 order by id DESC";
$res=mysql_query($sql);
mysql_query("SET NAMES 'utf8'");
mysql_query('SET CHARACTER SET utf8');

while(
$row=mysql_fetch_object($res)){


$name  iconv('windows-1256','utf-8',$row->name);


    
$sql_text.="UPDATE `article` SET `name` ='$name',
    `country`='$row->country',
    `town`='$row->town'
    where `id` = '$row->id' ;
    "
;
}
highlight_string($sql_text);
$file="update.sql";
$fp=fopen($file"w"); 
fwrite($fp,$sql_text);
fclose($fp); 
?>






zamile28 is offline   قديم 14-04-2011, 04:25 PM
الرد مع إقتباس
عضو نشيط جدا
#8  

البيانات كانت على الشكل ؟؟؟؟

وبعد الاسترجاع والادخال بقيت على نفس الحال.

؟؟؟؟؟؟؟

ما الحل ؟

UPDATE `tab1` SET `name` ='????',
`country`='??????',
`town`='????'
where `id` = '2' ;
UPDATE `tab1` SET `name` ='????',
`country`='?????',
`town`='????'
where `id` = '1' ;






__________________
مجلتي الصغيرة

آخر تعديل بواسطة apitos في 14-04-2011 الساعة 05:37 PM.
apitos is offline   قديم 14-04-2011, 05:09 PM
الرد مع إقتباس
عضو نشيط جدا
#9  

هل تقصد البيانات الاصلية بهذا الشكل ؟؟؟؟

إن كان كذلك فهذه ليست ترميز latin 1 ولا اي ترميز اخر .

إبدا من الاول.






zamile28 is offline   قديم 14-04-2011, 05:45 PM
الرد مع إقتباس
عضو نشيط جدا
#10  

تحققت من القاعدة.

كنت قد انشأتها تحت ترميز PHPMyadmin UTF8.

فقمت باستبداله الى الترميز latin1_swedish_ci

وجربت ادخال البيانات فاصبحت تبدو في القاعدة هكذا : ßÑÈáÇÁ

ولكن لما اردت استعراض الترميز المستعمل عموما في القاعدة

كود PHP:
SELECT CHARSET ((DATABASE()));

SELECT COLLATION ((DATABASE())); 
وجدت ان

charset = utf8
collation = utf8-general_ci






__________________
مجلتي الصغيرة

آخر تعديل بواسطة apitos في 15-04-2011 الساعة 07:46 PM.
apitos is offline   قديم 15-04-2011, 07:33 PM
الرد مع إقتباس
عضو نشيط جدا
#11  

قمت يتعدي ملف get_datas.php الى :

كود PHP:
<?php
header
('(anti-spam-(anti-spam-content-type:)) text/html; charset=utf-8' );
include (
"config.php");
$sql_text="";
$sql="select * from tab1 order by id DESC";
$res=mysql_query($sql);
mysql_query("SET NAMES 'utf8'");
mysql_query('SET CHARACTER SET utf8');

while(
$row=mysql_fetch_object($res)){


$name  iconv('windows-1256','utf-8',$row->name);


    
$sql_text.="UPDATE `tab1` SET `name` ='$name',
    `country`='$row->country',
    `town`='$row->town'
    where `id` = '$row->id' ;
    "
;
}
highlight_string($sql_text);
$file="update.sql";
$fp=fopen($file"w"); 
fwrite($fp,$sql_text);
fclose($fp); 
?>


وتعديل ملف config.php الى :

كود PHP:
<?php
// DB login information
$username 'root';
$password 'root';
$database 'db_test';
$host     'localhost';

$Charset "utf8"

$link mysql_connect($host$username$password);

$char mysql_query("SELECT CHARSET (DATABASE())") or die (mysql_error());
$coll mysql_query("SELECT COLLATION (DATABASE())") or die (mysql_error());
$chmysql_fetch_array($char);
$clmysql_fetch_array($coll);
echo 
"char = ".$ch[0]."<br />";
echo 
"coll = ".$cl[0]."<br />";
//mysql_set_charset($Charset,$link);  
//mysql_query("SET NAMES $Charset;", $link) or die ('Erreur de connexion au serveur: '.mysql_error());

mysql_select_db($database);
//mysql_set_charset("utf8");
?>
مع حفظ الملفين تحت ترميز ANSI.

فكان ملف update.sql الناتج :

كود PHP:
char utf8
coll 
utf8_general_ci
 UPDATE 
`tab1SET `name` =''
    `
country`=''
    `
town`='' 
    
where `id` = '14' 
    
UPDATE `tab1SET `name` =''
    `
country`=''
    `
town`='' 
    
where `id` = '13' 
    
UPDATE `tab1SET `name` =''
    `
country`=''
    `
town`='' 
    
where `id` = '12' 
    
UPDATE `tab1SET `name` =''
    `
country`=''
    `
town`='' 
    
where `id` = '11' 
    
UPDATE `tab1SET `name` =''
    `
country`=''
    `
town`='' 
    
where `id` = '10' 
    
UPDATE `tab1SET `name` =''
    `
country`=''
    `
town`='' 
    
where `id` = '9' 
    
UPDATE `tab1SET `name` ='ط¹ط§ط¯ظ„'
    `
country`='سوريا'
    `
town`='حماة' 
    
where `id` = '8' 
    
UPDATE `tab1SET `name` ='ط¹ظ„ظٹ'
    `
country`='العراق'
    `
town`='البغدادية' 
    
where `id` = '7' 
    
UPDATE `tab1SET `name` ='ظپظٹطµظ„'
    `
country`='السعودية'
    `
town`='الرياض' 
    
where `id` = '6' 
    
UPDATE `tab1SET `name` ='ط§ط­ظ…ط¯'
    `
country`='مصر'
    `
town`='بور سعيد' 
    
where `id` = '5' 
    
UPDATE `tab1SET `name` ='ط¹ظ…ط±'
    `
country`='العراق'
    `
town`='كربلاء' 
    
where `id` = '4' 
نلاحظ ان الاسم لعد استعمال iconv اصبح من الحرف العربي الى هذا
كود PHP:
ط¹ظ…ط± 
ما مفهوم هذا ؟

شكراً.






__________________
مجلتي الصغيرة
apitos is offline   قديم 15-04-2011, 08:20 PM
الرد مع إقتباس
عضو سوبر نشيط
#12  

كتبت رد وقمت بتعديله بعد مشاهدة الملفات لان ترميز الملفات utf8
جدول tab1 لديك بترميز latin1 وهو الواضح من الملف المرفق
ENGINE=MyISAM DEFAULT CHARSET=latin1
قم بتعديلها الى
ENGINE=MyISAM DEFAULT CHARSET=utf8
وقم بالتجربة مرة اخرى






__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

آخر تعديل بواسطة مهندس مصرى في 15-04-2011 الساعة 09:31 PM.
مهندس مصرى is offline   قديم 15-04-2011, 09:16 PM
الرد مع إقتباس
عضو نشيط جدا
#13  

أهلا اخي مهندس مصري.

أريد استرجاع البيانات بترميز latin1 قبل تبديل الكل الى utf8.

لاني لن استطيع الاستفادة من البيانات اذا حولت ترميز الكل الى utf8 مباشرة كما اشرت علي لانها ستفسد.






__________________
مجلتي الصغيرة
apitos is offline   قديم 15-04-2011, 10:03 PM
الرد مع إقتباس
عضو سوبر نشيط
#14  

في ملف get_datas.php ما رأيك أن تضيف السطر التالي اعلى الملف بعد كود الهيدر مباشرة ..
كود PHP:
 echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
او قم بتعديل ترميز الملف نفسه الى utf-8 ولا تكتفي باضافة هيدر utf-8

اما عن نقل البيانات فهذا يستلزم منك اجراء تعديل على كل البيانات الموجودة داخل قاعدة البيانات ..
  • قم بانشاء قاعدة بيانات جديدة بترميز utf8 بنفس الجداول والحقول الموجودة في قاعدة البيانات القديمة ولا تضع بها اي داتا (وقم بمراعاة ان يكون الجداول والحقول وقاعدة البيانات جميعا بترميز utf8).
  • قم بعمل اسكربت بسيط يقوم بعمل اتصالين في نفس الملف اتصال على قاعدة البيانات القديمة واتصال على قاعدة البيانات الجديدة على سبيل المثال سنسمي الاتصال الاول $conn1 والاتصال الثاني $conn2 .
لو كان لديك مثلا جدول tab1 والحقل title ساوضح كيف يتم اجراء تعديل عليه ونقله بترميز جديد..

كود PHP:
$query1 mysql_query("select `title` from `tab1`,$conn1);
while($fetch = mysql_fetch_array($query1)){
    $title = iconv('cp1256','utf-8',$fetch['title']);
    mysql_query("
insert into `tab1` (`title`) values (' " . $title . "')",$conn2);

عند استخدام iconv فالترميز الصحيح الذي يجب استخدامه داخل الامر iconv هو cp1256 وليس windows-1256.

هناك حل آخر وهو ان تقوم بتجربة حل السكربت الذي وضعه zamile28 .. ولم اجربه من قبل لكن اطلعت الان على شفيرته البرمجية فوجدت انه غير آمن لانه يقوم بتعديل البيانات في نفس القاعدة لذلك قد يحدث خطأ معين اثناء التعديل فبالتالي تحدث لديك مشاكل في قاعدة البيانات لأنه سيكون هناك بعض الداتا محولة والباقي غير محول .. لذلك اذا اردت استخدامه قم بعمل نسخة احتياطية اولاً من قاعدة البيانات.






__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
مهندس مصرى is offline   قديم 16-04-2011, 08:43 AM
الرد مع إقتباس
عضو نشيط جدا
#15  

اخي مهندس مصري :

هل اطلعت على هذا الرابط :

http://codex.wordpress.org/User:Jere...UTF8Conversion

فهم يقومون :

بنقل البيانات وتغيير ترميز القاعدة ثم ادراجها في نفس القاعدة ....

كيف استفيد من تلك العملية اليدوية بعملها برمجيا كما في ملفاتي ؟

شكرا مسبقا ؟






__________________
مجلتي الصغيرة
apitos is offline   قديم 16-04-2011, 11:05 AM
الرد مع إقتباس
عضو نشيط جدا
#16  

هذا ترميز utf
كود PHP:
ط¹ظ…ط± 
لكن لم تقم بعمل تغير باقي القيم

كود PHP:

 $name  
iconv('windows-1256','utf-8',$row->name);
 
$country  iconv('windows-1256','utf-8',$row->country);
  
$town  iconv('windows-1256','utf-8',$row->town);

    
$sql_text.="UPDATE `tab1` SET `name` ='$name',
    `country`='$country',
    `town`='$town '
    where `id` = '$row->id' ;
    "
;

اخي مهندس مصري windows-1256

وليس cp1256 لان يجلبها من قاعدة البيانات للمستعرض اي ان يقراها windows-1256 ثم يعود زراعتها

utf هذا فقط للحفاظ علي قاعدة بيانات موجودة اصلا ويريد تحويلها وليس للعمل كمشروع من الصفر


التجارب يجب ان تتم علي سيرفر محلي لهذا لاخوف من المحاولة والخطا

واتمني انك تفعل ذلك

عموما إذا كان اردث إرسال قاعدة البيانات التي لديك ساقوم بالعمل كاملا تحويل وضبط السكريبت






zamile28 is offline   قديم 16-04-2011, 11:07 AM
الرد مع إقتباس
عضو نشيط جدا
#17  

اريد ان اجرب حتى اصل الى الحل بمساعدتكم ان شاء الله.

فقط اصبروا علي

وان فشلت فسارسل لك اخي زميل القاعدة كلها لتحويلها برمجيا (لان هذا امر تحويل البيانات ينفع عند ترقية نسخة ما)

اسئلة عند الاسترجاع :

1 - هل يجب ان تكون جميع ملفات php محفوظة بـ UTF8 Wihtout BOM ؟

2 - هل هيدر الملفات يجب ان يكون UTF8 وليس windows-1256 ؟

3 - هل يجب زيادة السطور :

كود PHP:
@mysql_set_charset('utf8');
      @
mysql_query('SET NAMES utf8');
      @
mysql_query('SET CHARACTER SET utf8');
      @
mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"'); 
في ملف الاتصال من البداية ولا خوف بان يؤثر ذلك كله عند استرجاع البيانات بترميز latin1 من القاعدة ؟

4 - هل حفظ ناتج البيانات المسترجعة في ملف update.sql فكرة جيدة ؟ وكيف نضمن انه يتم حفظه تحت ترميز UTF8 Without BOM ولا "تتخربش" البيانات ؟

شكراً.






__________________
مجلتي الصغيرة
apitos is offline   قديم 16-04-2011, 11:51 AM
الرد مع إقتباس
عضو نشيط جدا
#18  

أول ملاحظة :

ملف config.php يعمل جيدا اذا كان هكذا :

كود PHP:
<?php
// DB login information
$username 'root';
$password 'root';
$database 'db_test';
$host     'localhost';

$Charset "utf8"

$link mysql_connect($host$username$password);

$char mysql_query("SELECT CHARSET (DATABASE())") or die (mysql_error());
$coll mysql_query("SELECT COLLATION (DATABASE())") or die (mysql_error());
$chmysql_fetch_array($char);
$clmysql_fetch_array($coll);
echo 
"char = ".$ch[0]."<br />";
echo 
"coll = ".$cl[0]."<br />";
//mysql_set_charset($Charset,$link);  
//mysql_query("SET NAMES $Charset;", $link) or die ('Erreur de connexion au serveur: '.mysql_error());

mysql_select_db($database);
//mysql_set_charset("utf8");
?>
وملف update.sql الناتج يكون هكذا :

كود PHP:
UPDATE `tab2SET `name` ='عادل',
    `
country`='سوريا',
    `
town`='حماة '
    
where `id` = '8' ;
    
UPDATE `tab2SET `name` ='علي',
    `
country`='العراق',
    `
town`='البغدادية '
    
where `id` = '7' ;
    
UPDATE `tab2SET `name` ='فيصل',
    `
country`='السعودية',
    `
town`='الرياض '
    
where `id` = '6' ;
    
UPDATE `tab2SET `name` ='احمد',
    `
country`='مصر',
    `
town`='بور سعيد '
    
where `id` = '5' ;
    
UPDATE `tab2SET `name` ='عمر',
    `
country`='العراق',
    `
town`='كربلاء '
    
where `id` = '4' 
اما نزعت سلاش التعليقات من امام السطور :

كود PHP:
mysql_set_charset($Charset,$link);  
mysql_query("SET NAMES $Charset;"$link) or die ('Erreur de connexion au serveur: '.mysql_error());
mysql_set_charset("utf8"); 
فسيصبح ملف update.sql غير مقروء هكذا :

كود PHP:
UPDATE `tab2SET `name` ='ط£ع‘ط£â€،ط£عˆط£طŒ'
    `
country`='ط£â€œط£آ¦ط£â€کط£آ­ط£â€،'
    `
town`='ط£ع†ط£آ£ط£â€،ط£â€° ' 
    
where `id` = '8' 
    
UPDATE `tab2SET `name` ='ط£ع‘ط£طŒط£آ­'
    `
country`='ط£â€،ط£طŒط£ع‘ط£â€کط£â€،ط£â€چ'
    `
town`='ط£â€،ط£طŒط£ث†ط£â€؛ط£عˆط£â€،ط£عˆط£آ­ط£â€° ' 
    
where `id` = '7' 
    
UPDATE `tab2SET `name` ='ط£â€Œط£آ­ط£â€¢ط£طŒ'
    `
country`='ط£â€،ط£طŒط£â€œط£ع‘ط£آ¦ط£عˆط£آ­ط£â€°'
    `
town`='ط£â€،ط£طŒط£â€کط£آ­ط£â€،ط£â€“ ' 
    
where `id` = '6' 
    
UPDATE `tab2SET `name` ='ط£â€،ط£ع†ط£آ£ط£عˆ'
    `
country`='ط£آ£ط£â€¢ط£â€ک'
    `
town`='ط£ث†ط£آ¦ط£â€ک ط£â€œط£ع‘ط£آ­ط£عˆ ' 
    
where `id` = '5' 
    
UPDATE `tab2SET `name` ='ط£ع‘ط£آ£ط£â€ک'
    `
country`='ط£â€،ط£طŒط£ع‘ط£â€کط£â€،ط£â€چ'
    `
town`='ط£ع؛ط£â€کط£ث†ط£طŒط£â€،ط£ظ¾ ' 
    
where `id` = '4' 
ولكن هذه السطور الا احتاجها في عملية الادراج بعد تحويل القاعدة الى ترميز UTF8 ؟

في هذه الحالة وجب ايجاد ملفي اتصال :

1 - الاول خاص بالاسترجاع عندما تكون القاعدة بترميز latin1.

2 - الثاني خاص بالادراج عندما تصبح القاعدة بترميز utf8.



ملف get_datas.php المستعمل (محفوظ بصيغة UTF8 without BOM)

كود PHP:
<?php
header
('(anti-spam-(anti-spam-content-type:)) text/html; charset=utf-8' );
include (
"config.php");
$sql_text="";
$sql="select * from tab2 order by id DESC";
$res=mysql_query($sql);
mysql_query("SET NAMES 'utf8'");
mysql_query('SET CHARACTER SET utf8');

while(
$row=mysql_fetch_object($res)){
    
$name  iconv('windows-1256','utf-8',$row->name);
    
$country  iconv('windows-1256','utf-8',$row->country);
    
$town  iconv('windows-1256','utf-8',$row->town);

    
$sql_text.="UPDATE `tab2` SET `name` ='$name',
    `country`='$country',
    `town`='$town '
    where `id` = '$row->id' ;
    "
;
}
highlight_string($sql_text);
$file="update.sql";
$fp=fopen($file"w"); 
fwrite($fp,$sql_text);
fclose($fp); 
?>






__________________
مجلتي الصغيرة

آخر تعديل بواسطة apitos في 16-04-2011 الساعة 12:22 PM.
apitos is offline   قديم 16-04-2011, 12:19 PM
الرد مع إقتباس
عضو سوبر نشيط
#19  

اذا كانت قاعدة البيانات لديك ماهي ضخمة او كبيرة جدا، يعني بحدود 1 ميغا
تقدر ترسلها لي وانا راح اقوم بتحويها لك عبر محرر يدعم الترميز العالمي

قم باصدار القاعدة من خلال PHPMyAdmin بالترميز أسكي العربي وأنا سأقوم بتعديله وتحويله إلى UTF8






__________________
الخدمات البرمجية
تعديلات برمجية - تطوير برمجيات جاهزة - صيانة قواعد بيانات
برمجة خاصة (الأولوية للأفكار الجديدة والخاصة)

المراسلة : http://it.rewaq.com
القائد is offline   قديم 17-04-2011, 12:25 PM
الرد مع إقتباس
عضو نشيط جدا
#20  

إقتباس:
المشاركة الأصلية بواسطة zamile28 مشاهدة مشاركة
هذا ترميز utf

عموما إذا كان اردث إرسال قاعدة البيانات التي لديك ساقوم بالعمل كاملا تحويل وضبط السكريبت
إقتباس:
المشاركة الأصلية بواسطة القائد مشاهدة مشاركة
اذا كانت قاعدة البيانات لديك ماهي ضخمة او كبيرة جدا، يعني بحدود 1 ميغا
تقدر ترسلها لي وانا راح اقوم بتحويها لك عبر محرر يدعم الترميز العالمي

قم باصدار القاعدة من خلال PHPMyAdmin بالترميز أسكي العربي وأنا سأقوم بتعديله وتحويله إلى UTF8

تم الارسال منذ الاسبوع الماضي.

هل من جديد ؟






__________________
مجلتي الصغيرة

آخر تعديل بواسطة apitos في 02-05-2011 الساعة 01:45 PM.
apitos is offline   قديم 02-05-2011, 11:04 AM
الرد مع إقتباس
عضو سوبر نشيط
#21  

الملف الذي ارسلته لم يكن بالعربي
بل كان بترميز غريب

تأكد انك تصدر القاعدة بأي ترميز غير مهم، لكن من المهم ان تكون النصوص فيه باللغة العربي

وأنا اقترح انه اذا كانت البيانات اللي تريد تحويلها غير مهمة انك تبدأ بالقاعدة فارغة من جديد بترميز UTF-8 مباشرة

اتمنى تتأكد من الملف مرة أخرى وترسله لي


تقبل مني أرق تحية






__________________
الخدمات البرمجية
تعديلات برمجية - تطوير برمجيات جاهزة - صيانة قواعد بيانات
برمجة خاصة (الأولوية للأفكار الجديدة والخاصة)

المراسلة : http://it.rewaq.com
القائد is offline   قديم 02-05-2011, 12:47 PM
الرد مع إقتباس
عضو نشيط جدا
#22  

النصوص في القاعدة ليست بالحرف العربي بالطبع لانها latin1_swedish_ci.

اما بخصوص البدء من جديد فلا يمكن ذلك على الاقل بالنسبة لمسميات الاقسام وامور اخرى مخزنة في القاعدة.






__________________
مجلتي الصغيرة
apitos is offline   قديم 02-05-2011, 01:41 PM
الرد مع إقتباس
الرد على الموضوع



أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
استفسار بسيط للاتصال بقاعدة البيانات utf8 FadyCoder PHP 2 08-09-2010 09:27 PM
تحويل قاعده البيانات من latin to utf8 artint.net PHP 4 25-06-2009 05:12 AM
هل من حل عملي لتغيير ترميز قاعدة البيانات الى UTF8 الحضرمي الويب والويب 2.0 والـ Semantic Web 2 27-05-2008 08:01 PM
كيف احول قاعدة البيانات من cp1256 الى utf8 feckra الويب والويب 2.0 والـ Semantic Web 2 05-08-2006 03:21 AM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 04:31 PM.