Może sie zdarzyć, że nasz serwer nie obsługuje iconv, lub po prostu nie mamy dostępu, aby uruchomić takie działanie.
Zawsze mozemy wybrac inną metodę konwersji znaków - niestety ma ona kilka wad - nie wszędzie to zadziała. Na przykład nalezy pominąć takie miejsca, które wskazują na tytuł, metadane, menu itp.. Konwertujemy tylko tresc!
Kolejną wadą jest sam fakt, że baza danych lekko nam się powiekszy w swojej obietosci ;)
Wystarczy lekko zmodyfikować powyższy skrypt wykonujac coś takiego:
Kod PHP:
<?php
set_time_limit(0);
//jezeli mamy tabele w innym kodowaniu niż na to wskazuje $convert_from to nalezy to wskazać
$convert_from = 'latin2_general_ci';
$convert_to = 'utf8_polish_ci';
$character_set= 'utf8';
//zmiana kodowania tabel (true/false)
$show_alter_table = false;
//zmiana kodowania struktury tabeli (true/false)
$show_alter_field = true;
// baza danych:
$username = '';
$password = '';
$database = '';
$host = 'localhost';
mysql_connect($host, $username, $password);
mysql_select_db($database);
$rs_tables = mysql_query(" SHOW TABLES ") or die(mysql_error());
print '<pre>';
while ($row_tables = mysql_fetch_row($rs_tables)) {
$table = mysql_real_escape_string($row_tables[0]);
if ($show_alter_table) {
echo("ALTER TABLE `$table` DEFAULT CHARACTER SET $character_set;\r\n");
}
$rs = mysql_query(" SHOW FULL FIELDS FROM `$table` ") or die(mysql_error());
while ($row=mysql_fetch_assoc($rs)) {
if ($row['Collation']!=$convert_from)
continue;
if ($row['Null']=='YES') {
$nullable = ' NULL ';
} else {
$nullable = ' NOT NULL';
}
// Does the field default to null, a string, or nothing?
if ($row['Default']==NULL) {
$default = " DEFAULT NULL";
} else if ($row['Default']!='') {
$default = " DEFAULT '".mysql_real_escape_string($row['Default'])."'";
} else {
$default = '';
}
CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
if ($show_alter_field) {
$field = mysql_real_escape_string($row['Field']);
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ą','&#260;') WHERE `$field` LIKE '%Ą%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ą','&#261;') WHERE `$field` LIKE '%ą%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ć','&#262;') WHERE `$field` LIKE '%Ć%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ć','&#263;') WHERE `$field` LIKE '%ć%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ć','&#263;') WHERE `$field` LIKE '%ć%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ę','&#281;') WHERE `$field` LIKE '%ę%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ł','&#321;') WHERE `$field` LIKE '%Ł%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ł','&#322;') WHERE `$field` LIKE '%ł%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ń','&#323;') WHERE `$field` LIKE '%Ń%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ń','&#324;') WHERE `$field` LIKE '%ń%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ó','&#211;') WHERE `$field` LIKE '%Ó%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ó','&#243;') WHERE `$field` LIKE '%ó%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ś','&#346;') WHERE `$field` LIKE '%Ś%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ś','&#347;') WHERE `$field` LIKE '%ś%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ź','&#377;') WHERE `$field` LIKE '%Ź%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ź','&#378;') WHERE `$field` LIKE '%ź%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'Ż','&#379;') WHERE `$field` LIKE '%Ż%'; \r\n";
echo "UPDATE `$table` SET `$field` = REPLACE(`$field`, 'ż','&#380;') WHERE `$field` LIKE '%ż%'; \r\n";
}
}
}
?>