Charset trouble

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • matheussousuke
    New Member
    • Sep 2009
    • 249

    Charset trouble

    Hi guys, good morning.

    I've just get this script for converting mysql tables from wordpress, and I want to use it in my server, but no with wordpress, with oscommerce, a friend of mine told me a few things I should do for make it working, but less than a rookie in PHP, began studying it now ¬¬", and sure I dont know how to use command line yet, she told me something about using command line along with FTP ascii table, I'm lost, couldn't do that, how do I install it? How do I configurate it?

    Ps: the script is for converting ascii characters for utf-8 or latin1. If u have anything else that can help me instead of using it, please let me know, here u see how's oscommerce http://www.mghospedagem.com/catalog/
    u can see on the left that there are strange characters (oscommerce chars configuration is correct, the trouble's with the server, I contacted em but they didn't nothing, that's why I'm trying to install this script)

    Here goes the script "convert_to_utf 8_sql_generator _extended.txt"

    Code:
    <?php
    /*
    Template Name: Convert Database to UTF8 
    
    Copyright 2007  Anders Stalheim Oefsdahl  (email : anders@apt.no)
    Detail at http://www.mydigitallife.info/2007/07/22/how-to-convert-character-set-and-collation-of-wordpress-database/
    
    Bug fix by My Digital Life on 22 June 2007.
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    
    */
    
    echo '<h1>Convert Database to UTF8</h1>';
    
    echo '<p>This script generates SQL to convert existing tables to utf8, following the guide at <a href="http://codex.wordpress.org/Converting_Database_Character_Sets">http://codex.wordpress.org/Converting_Database_Character_Sets</a>, temporarily setting various fields to BLOB before setting them back to their respective types.</p>';
    echo '<p>This is an extended script for databases which are already utf8 but the strings are in latin1. It converts existing tables and colums to latin1 before the BLOB conversion</p>';
    echo '<p>Please note that you probably will get some errors running the scripts, regarding key length on some tables. These errors can be ignored (at least I did :).</p>';
    
    require_once("wp-config.php");
    global $wpdb;
    
    /**
     * Fetch all tables
     */
    $tables = array();
    $sql_tables = "SHOW TABLES";
    $res_tables = $wpdb->get_results( $sql_tables );
    if( is_array( $res_tables ) ){
    	foreach( $res_tables as $res_table ){
    		if(strpos($res_table->Tables_in_DATABASENAME, $table_prefix) === 0)
    		$tables[$res_table->Tables_in_DATABASENAME] = array();
    	}
    }
    /**
     * Loop all tables fetching each table's fields and filter out fields of type CHAR, VARCHAR, TEXT, ENUM, and SET (and related variations)
     */
    if( count( $tables )>0 ){
    	foreach( $tables as $table=>$fields ){
    //		if (strpos($table_prefix, $table) == 0)
    //		{
    			$sql_fields = "EXPLAIN ".$table;
    			$res_fields = $wpdb->get_results( $sql_fields );
    			if( is_array( $res_fields ) ){
    				foreach( $res_fields as $field ){
    					switch( TRUE ){
    						case strpos( strtolower( $field->Type ), 'char' )===0:
    						case strpos( strtolower( $field->Type ), 'varchar' )===0:
    						case strpos( strtolower( $field->Type ), 'text' )===0:
    						case strpos( strtolower( $field->Type ), 'enum' )===0:
    						case strpos( strtolower( $field->Type ), 'set' )===0:
    						case strpos( strtolower( $field->Type ), 'tinytext' )===0:
    						case strpos( strtolower( $field->Type ), 'mediumtext' )===0:
    						case strpos( strtolower( $field->Type ), 'longtext' )===0:
    							$tables[$table][$field->Field] = $field->Type;
    							break;
    						
    						default:
    							break;
    					}
    				}
    //			}
    		}
    	}
    }
    
    $tables_to_latin1	= '';
    $tables_to_utf8		= '';
    $columns_to_latin1	= '';
    $columns_to_blob	= '';
    $columns_to_utf8	= '';
    
    foreach( $tables as $table=>$fields ){
    	$tables_to_latin1 .= "\nALTER TABLE ".$table." DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;";
    	$tables_to_utf8 .= "\nALTER TABLE ".$table." DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;";
    	if( count( $fields )>0 ){
    		foreach( $fields as $name=>$type ){
    			$columns_to_latin1 .= "\nALTER TABLE ".$table." MODIFY ".$name." CHARACTER SET latin1 COLLATE latin1_swedish_ci;";
    			$columns_to_blob .= "\nALTER TABLE ".$table." MODIFY ".$name." BLOB;";
    			$columns_to_utf8 .= "\nALTER TABLE ".$table." MODIFY ".$name." ".$type.";";
    		}
    	}
    }
    
    //$complete_sql = $sql_to_blob."\nALTER DATABASE ".DB_NAME." charset=utf8;".$sql_to_utf8.$sql_to_original;
    $complete_sql = $tables_to_latin1."\n".$columns_to_latin1."\n".$columns_to_blob."\n".$tables_to_utf8."\n".$columns_to_utf8;
    
    echo nl2br( $complete_sql );
    
    ?>
  • Markus
    Recognized Expert Expert
    • Jun 2007
    • 6092

    #2
    This seems like overkill. You might just change the content-type header of the page to something like: ISO-8859-1.

    Code:
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    </head>
    <body>
    ...

    Comment

    • matheussousuke
      New Member
      • Sep 2009
      • 249

      #3
      Sorry, but...
      I already did it =/

      Comment

      • Markus
        Recognized Expert Expert
        • Jun 2007
        • 6092

        #4
        Try 'utf-8'.

        Comment

        • matheussousuke
          New Member
          • Sep 2009
          • 249

          #5
          It doesn't works, I tried both. That friend of mine told me that the trouble is with the server, that I should install a script that correct that. She did it in her server, made a script and it worked,
          I asked if she could handle me the script but she sad she spent hours making it, now I found that one on the internet, shown her and she said that it will work if I install it corretly, she tryied to teach me how to install and configurate but dindt has too much time, she has been pretty busy.

          Comment

          • matheussousuke
            New Member
            • Sep 2009
            • 249

            #6
            Anyone?

            ...

            ...

            ...

            Comment

            Working...