PHP'de Latin olmayan karakterlerin bozulma sorunu genellikle karakter kodlama ayarlarından kaynaklanır. Veritabanı tablo türlerini değiştirmeden bu sorunu çözebilirsiniz:
1. PHP dosyalarının başına UTF-8 header ekleyin:
header('Content-Type: text/html; charset=UTF-8');
2. MySQL bağlantısında karakter setini belirtin:
// MySQLi için
mysqli_set_charset($connection, "utf8");
// PDO için
$pdo = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
3. HTML formlarında charset belirtin:
<meta charset="UTF-8">
<form accept-charset="UTF-8" method="post">
4. Mevcut verileri düzeltmek için:
// Veri gönderirken
$data = mb_convert_encoding($_POST['field'], 'UTF-8', 'auto');
// Veri alırken
$data = mb_convert_encoding($row['field'], 'UTF-8', 'UTF-8');
5. my.cnf dosyasında MySQL ayarları:
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
Bu ayarlar mevcut tablolarınızı etkilemeden karakter kodlama sorununu çözmelidir.