Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Βοήθεια λύσεις και νέα από τον χώρο των open source ή έτοιμων εφαρμογών που έχουν φτιαχτεί με την PHP όπως oscommerce, κ.α.

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 18 Μαρ 2008 18:56

Έχω ένα phpbb2 φόρουμ ( www.orthodoxyhub.gr ) και η κωδικοποίησή του είναι iso-8859-7.
Μπορώ να την αλλάξω σε UTF-8 και πώς ;

Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 06:42

Μου είπανε σε ένα άλλο φόρουμ για να "τρέξω" ένα αρχείο utf8_db.php
Λέτε να είναι ασφαλές ; Το γνωρίζετε ;
Ο κωδικάς του είναι :

Κώδικας: Επιλογή όλων

<?
###########################################
## Phanupong Panyadee
## http&#58;//www.appservnetwork.com
## Convert Database from TIS-620 to UTF-8
## Powered by apples
##
## Version &#58; 1.0
## Released &#58; 2006-07-31
##
## HOW TO RUN THIS PROGRAM
##   1. This program design for "Command Line Execution" Only !!   ******** Not for WWW  ********.
##   2. This program will be "Convert all tables on your Database", Please specify database name below.
##   3. BEFORE Convert database please BACKUP YOUR DATABASE FIRST.
##   4. On Windows OS &#40;AppServ&#41;.
##       - Goto Start -> Run -> cmd
##       - C&#58;\AppServ\php\php.exe -d max_execution_time=0 utf8_db.php
##       - C&#58;\Xampp\php\php.exe -d max_execution_time=0 utf8_db.php
##   5. On Linux &#40;Test on Debian Linux&#41;.
##      - php -d max_execution_time=0 utf8_db.php
##
###########################################

$dbhost = "localhost";
$dbuname = "root";
$dbpass = "";
$dbname = "mysql";

$char1 = "iso-8859-7";	# Source Character Set 
$char2 = "UTF-8";		# Destination Character Set
$varchar_len = "0";	# 1 = Press y to confirm
										# 0 = Automatic Add Length for Varchar&#40;&#41;

###########################################
# Use utf8_general_ci because it is faster.
# Use utf8_unicode_ci because it is more accurate.

$field_type = "utf8_unicode_ci"; 

###########################################
echo "<pre>";
if &#40;!extension_loaded&#40;'iconv'&#41;&#41; &#123;
   if &#40;strtoupper&#40;substr&#40;PHP_OS, 0, 3&#41;&#41; === 'WIN'&#41; &#123;
       dl&#40;'php_iconv.dll'&#41;;
   &#125; else &#123;
       dl&#40;'iconv.so'&#41;;
   &#125;
&#125;

mysql_connect&#40;$dbhost,$dbuname,$dbpass&#41; or die &#40;"Can't Connect to MySQL"&#41;;
mysql_db_query&#40;$dbname,"ALTER DATABASE `$dbname` default character set utf8 collate $field_type"&#41;;
$result=mysql_db_query&#40;$dbname,"show tables"&#41;;
while&#40;list&#40;$table&#41;=mysql_fetch_row&#40;$result&#41;&#41; &#123;
        $result2=mysql_db_query&#40;$dbname,"desc $table"&#41;;
        echo "Table &#58; $table\n";
        mysql_db_query&#40;$dbname,"ALTER TABLE `$table` DEFAULT CHARACTER SET utf8 COLLATE $field_type"&#41;;
        while&#40;list&#40;$field,$type,$null,$key&#41;=mysql_fetch_row&#40;$result2&#41;&#41; &#123;
			list&#40;$typename,$olen&#41;=explode&#40;"&#40;",$type&#41;;
			switch &#40;$typename&#41; &#123;
				case "varchar" &#58;
					$result3=mysql_db_query&#40;$dbname,"SELECT LENGTH&#40;MAX&#40; $field &#41;&#41; FROM  `$table`"&#41;;
					list&#40;$max_len&#41;=mysql_fetch_row&#40;$result3&#41;;
					$olen=substr&#40;$olen,0,-1&#41;;
					$len = $olen + 80;
					if &#40;$varchar_len == "1"&#41; &#123;
						echo "\nField &#58; $field\n";
						echo "Varchar&#40;$olen&#41; Need to change to Varchar&#40;$len&#41; ?\n";
						echo "Type 'y' to confirm &#58; ";
						$input = trim&#40;strtolower&#40;fgets&#40;STDIN&#41;&#41;&#41;;
					&#125; else &#123;
						$input = "y";
					&#125;
					if &#40;$input == "y"&#41; &#123;
						mysql_db_query&#40;$dbname,"ALTER TABLE `$table` CHANGE `$field` `$field` VARCHAR&#40; $len &#41; "&#41;;
					&#125;
					unset &#40;$olen,$len&#41;;
				break;
			&#125;
                mysql_db_query&#40;$dbname,"ALTER TABLE `$table` CHANGE `$field` `$field` $type CHARACTER SET utf8 COLLATE $field_type"&#41;;
                $all_field&#91;&#93; = $field;
                if &#40;$key == "PRI"&#41; &#123;
                        $table_key&#91;&#93; = $field;
                &#125;
        &#125;
        foreach &#40;$all_field as $value&#41; &#123;
                $select_field .= "`$value`,"; 
        &#125;
        $num_field=count&#40;$all_field&#41;;
        $num_key=count&#40;$table_key&#41;;
        $select_field = substr&#40;$select_field ,0,-1&#41;;
        $update_field = substr&#40;$update_field ,0,-18&#41;;
        mysql_db_query&#40;$dbname,"SET NAMES latin1"&#41;;
        mysql_db_query&#40;$dbname,"SET collation_connection = 'latin1_swedish_ci'"&#41;;
        $result3=mysql_db_query&#40;$dbname,"select $select_field from $table"&#41;;
        mysql_db_query&#40;$dbname,"SET NAMES utf8"&#41;;
        mysql_db_query&#40;$dbname,"SET collation_connection = '$field_type'"&#41;;
        $arow=mysql_num_rows&#40;$result3&#41;;
        $i = 1;
        if &#40;$arow !=0&#41; &#123;
                while&#40;$arr=mysql_fetch_array&#40;$result3&#41;&#41;&#123;
                        if &#40;$i == 1&#41; &#123;
							echo "   Found $arow fields.\n";
                        &#125;
                        ++$i;
                        for &#40;$x=0;$x<$num_field;$x++&#41; &#123;
							if &#40;is_null&#40;$arr&#91;$x&#93;&#41;&#41; &#123;
								$var = "`$all_field&#91;$x&#93;`=NULL,";
							&#125; else &#123;
                                $var = ICONV&#40;"$char1","$char2",$arr&#91;$x&#93;&#41;;
								$lenchar1=strlen&#40;$arr&#91;$x&#93;&#41;;
								$lenchar2=strlen_utf8&#40;$var&#41;;
								if &#40;$char1 == "TIS-620"&#41; &#123;	 // Loop for Thai Convert. You can split to function.
									if &#40;$lenchar1 != $lenchar2&#41; &#123;
										++$no_len;
										# echo "$no_len Char Len &#58; $lenchar1 && $lenchar2 ";
										$var = ICONV&#40;"CP874","$char2",$arr&#91;$x&#93;&#41;;
										$lenchar2=strlen_utf8&#40;$var&#41;;
										if &#40;$lenchar1 == $lenchar2&#41; &#123;
											$result_len = "Ok";
										&#125; else &#123;
											$result_len = "MacThai";
										&#125;
										if &#40;$result_len == "MacThai"&#41; &#123;
											$var = ICONV&#40;"MacThai","$char2",$arr&#91;$x&#93;&#41;;
											$lenchar2=strlen_utf8&#40;$var&#41;;
											if &#40;$lenchar1 == $lenchar2&#41; &#123;
												$result_len = "Ok";
											&#125; else &#123;
												$result_len = "Another Charset";
												$var = $arr&#91;$x&#93;;
											&#125;
										&#125;
										# echo "Again &#58; $lenchar2 $result_len\n";
									&#125; // end if $lenchar1 != $lenchar2
                                &#125;
                                $var = ereg_replace&#40;"\\\\","\\\\",$var&#41;;
                                $var = ereg_replace&#40;"'","\'",$var&#41;;
                                $var = "`$all_field&#91;$x&#93;`='$var',";
							&#125;
                                $update_field .= $var;
                                if &#40;isset&#40;$table_key&#41;&#41; &#123;
									if &#40;$x==0&#41; &#123;
										for &#40;$y=0;$y<$num_key;$y++&#41; &#123;
											$key = $table_key&#91;$y&#93;;
											$update_where .= "`$table_key&#91;$y&#93;`='$arr&#91;$key&#93;' and ";
										&#125;
									&#125;
                                &#125; else &#123;
									$update_where .= "`$all_field&#91;$x&#93;`='$arr&#91;$x&#93;' and ";
                                &#125;
                        &#125;
                        $update_field = substr&#40;$update_field ,0,-1&#41;;
                        $update_where = substr&#40;$update_where ,0,-4&#41;;
                        #echo "UPDATE $table  SET $update_field where $update_where\n";
                        $uresult=mysql_db_query&#40;$dbname,"UPDATE $table  SET $update_field where $update_where"&#41;;
						$converted = $converted + $uresult;
                        unset&#40;$update_where,$update_field&#41;;
                &#125;
        &#125; else &#123;
                echo "   NO Data in this table. \n";
        &#125;
         echo "   Converted $converted fields.\n";
        echo "------------------------\n";
        unset&#40;$all_field,$select_field,$update_field,$table_key,$converted&#41;;
&#125;

function strlen_utf8 &#40;$str&#41; &#123;
   $i = 0;
   $count = 0;
   $len = strlen &#40;$str&#41;;
   while &#40;$i < $len&#41; &#123;
		$chr = ord &#40;$str&#91;$i&#93;&#41;;
		$count++;
		$i++;
		if &#40;$i >= $len&#41;   break;
			if &#40;$chr & 0x80&#41; &#123;
			   $chr <<= 1;
			   while &#40;$chr & 0x80&#41; &#123;
					$i++;
					$chr <<= 1;
			   &#125;
			&#125;
		&#125;
   return $count;
&#125;
?>

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από Basilakis » 19 Μαρ 2008 10:53

Δέν θέλεις να αλάξεις την κωδικοποίηση του forum, αλλα την κωδικοποίηση της βάσης που φιλοξενείτε το forum.

Κοίτα κάτι τέτοιο όσο ασφαλές και να ήτανε / είναι ένα script ποτέ δεν θα το έκανα με τέτοιο. Είσοδο στην βάση δεδομένω, και Η τρέξε δικό σου query ή αλαξέτε manual, one by one

Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 12:01

Άν αλλάξω την κωδικοποίηση του φόρουμ χωρίς να αλλάξω την κωδικοποίηση της βάσης τί αποτέλεσμα θα έχω ;
Αυτό που με ενδιαφέρει μόνο είναι η αρχική σελίδα. Θέλω να μπορούν να φαίνονται πολυτονικά γράμματα στην αρχική σελίδα μόνο . Αυτό γίνεται με κάποιο απλό τρόπο ;

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από Basilakis » 19 Μαρ 2008 12:04

Δοκίμασε να κάνεις το header του forum σε utf8

Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 12:10

Basilakisweb έγραψε:Δοκίμασε να κάνεις το header του forum σε utf8
Αυτό πώς γίνεται ; Sorry αλλά είμαι σχεδόν άσχετος :oops:
Στο overall_header.tpl γράφει :
<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCODING}"
αλλά που θα την βρώ αυτη την μεταβλητη για να την αλλαξω ;

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από Basilakis » 19 Μαρ 2008 12:17

Αντί να κρατήσεις το {S_CONTENT_ENCODING_}

βάλει εκει μέσα στην κωδικοποίησή σου. Όχι ο καλύτερος τρόπος, αλλα ο ποίο γρήγορος ;)

Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 13:00

Καλύτερα μην λέμε βλακείες ! :D
Θα πάρουμε στο λαιμό μας και κανα άλλον


Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 17:55

Basilakisweb έγραψε:Μου λές οτι δεν δούλεψε;
Φυσικα ! Αφού η βάση είναι ελληνικά !
Όλα τα γράμματα τα εμφάνισε σαν τετραγωνάκια :D
Συνημμένα
utf-8.jpg

Άβαταρ μέλους
Banavas
Script Master
Δημοσιεύσεις: 1367
Εγγραφή: 21 Νοέμ 2004 20:25
Επικοινωνία:

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από Banavas » 19 Μαρ 2008 19:06

zinobios έγραψε:Καλύτερα μην λέμε βλακείες ! :D
Θα πάρουμε στο λαιμό μας και κανα άλλον
Καλύτερα να μιλάς πιο όμορφα σε ανθρώπους που προσπαθούν να σε βοηθήσουν ξοδεύοντας πολύτιμο χρόνο.

Σωστά σου είπε να αλλάξεις την κωδικοποίηση και της βάσης για να μην βλέπεις τα τετραγωνάκια.
Happy coding....
Μάρκος
http://lasernet.gr

Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 19:27

Banavas έγραψε:Καλύτερα να μιλάς πιο όμορφα σε ανθρώπους που προσπαθούν να σε βοηθήσουν ξοδεύοντας πολύτιμο χρόνο.
Σωστά σου είπε να αλλάξεις την κωδικοποίηση και της βάσης για να μην βλέπεις τα τετραγωνάκια.
Μάρκο αυτό το είπα μήπως κανείς άλλος καταλάβει λάθος ...

Ζητάω συγνώμη Βασίλη αν σε πρόσβαλλα ! :oops:
Δεν ήταν καθόλου "βλακεία" αυτό που είπες απλά είμαι λίγο φοβισμένος μήπως δεν τα καταφέρω με την μετατροπή γιατί είμαι άπειρος σε τέτοια και μου ξέφυγε αυτή η λέξη...
Με γειά το καινούργιο site ! ( και η υπογραφή :D )

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από Basilakis » 19 Μαρ 2008 19:40

Όχι δεν με πρόσβαλές, σε καμία περίπτωση. Εγώ σου είπα όμως, όχι να αλάξεις μόνο το header αλλα ΚΑΙ την βάση :)

Άβαταρ μέλους
zinobios
Δημοσιεύσεις: 326
Εγγραφή: 15 Αύγ 2005 21:49

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από zinobios » 19 Μαρ 2008 19:51

Άν αλλάξω την βάση δεν θα χρειαστεί να αλλάξω το overall_header έτσι δεν είναι ;
Πάντως θα πρέπει να αλλάξω και την γλώσσα. Έτσι μου είπανε στο άλλο φόρουμ ( http://phpbb2.gr/viewtopic.php?f=32&t=1567 ) αλλά αυτό που φοβάμαι είναι μήπως "χαλάσουνε" τα mods που έχω βάλει στο φόρουμ.

eBoxNet
Δημοσιεύσεις: 136
Εγγραφή: 17 Σεπ 2007 18:34
Επικοινωνία:

Μπορώ να αλλάξω την κωδικοποίηση σε UTF-8 ;

Δημοσίευση από eBoxNet » 19 Μαρ 2008 20:01

Always Remember...BACKUP 1st.

Απάντηση

Επιστροφή στο “PHP έτοιμες εφαρμογές”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες