Проблемы кодирования PHP + MySQL для португальского языка (PT-Br) - PullRequest
1 голос
/ 18 июля 2010

Я занимаюсь разработкой веб-сайта на бразильском португальском языке и сталкиваюсь с некоторыми действительно раздражающими проблемами кодирования.

Слова, которые должны быть написаны так: - бито пишется так:1004 * Я заметил, что хотя тексты все еще находятся в базе данных, они в порядке.Но когда я использую echo с PHP, возникает проблема с кодировкой.

Список вещей, которые я уже сделал и не помог:

1- Установите файлы PHP, которые будут сохранены какUTF-8

2- Я использую этот метатег <meta http-equiv="content-type" content="text/html; charset=utf-8" />

3- Я использовал этот SQL-запрос:

CREATE DATABASE db_name
    CHARACTER SET utf8
    DEFAULT CHARACTER SET utf8
    COLLATE utf8_general_ci
    DEFAULT COLLATE utf8_general_ci
    ;

ALTER DATABASE db_name
    CHARACTER SET utf8
    DEFAULT CHARACTER SET utf8
    COLLATE utf8_general_ci
    DEFAULT COLLATE utf8_general_ci
    ;

ALTER TABLE tbl_name
    DEFAULT CHARACTER SET utf8
    COLLATE utf8_general_ci
    ;

Ответы [ 5 ]

4 голосов
/ 25 февраля 2011

Не пытайтесь изобретать велосипед, будьте проще: просто используйте следующую строку после выбора базы данных:

mysql_query("SET NAMES 'utf8'") OR die(mysql_error()); 
4 голосов
/ 18 июля 2010

Вы можете изменить кодировку, используя эту функцию:

$q = mysql_set_charset('utf8');
var_dump($q);

(если функция возвращает true, она была успешной).Это должно исправить ваши проблемы с соединением.

Для более старых версий PHP вы можете использовать следующее:

<?php
 if (function_exists('mysql_set_charset') === false) {
     /**
      * Sets the client character set.
      *
      * Note: This function requires MySQL 5.0.7 or later.
      *
      * @see http://www.php.net/mysql-set-charset
      * @param string $charset A valid character set name
      * @param resource $link_identifier The MySQL connection
      * @return TRUE on success or FALSE on failure
      */
     function mysql_set_charset($charset, $link_identifier = null)
     {
         if ($link_identifier == null) {
             return mysql_query('SET NAMES "'.$charset.'"');
         } else {
             return mysql_query('SET NAMES "'.$charset.'"', $link_identifier);
         }
     }
 }
 ?>

Похоже, PHP использует по умолчанию latin1, и я не могу найтиспособ изменить значение по умолчанию.Поэтому я думаю, вам придется использовать mysql_set_charset() каждый раз, когда вы начинаете новое соединение.

Boa Sorte.

1 голос
/ 20 сентября 2012

Шахта решается путём:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

в заголовке страницы, кроме повторного создания таблиц и изменения параметров сортировки базы данных на кодировку utf-8.

0 голосов
/ 06 февраля 2013
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Размещение над метатегом внутри <head> тега вашего html / php документа.

И вам также нужно выполнить этот запрос mysql_query("SET NAMES 'utf8'"); в файле основных функций, если вы используете базу данных MySQL с PHP.

0 голосов
/ 05 ноября 2012

Используйте это для португальского:

<meta http-equiv="Content-Type" content="text/html; charset=pt-BR" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...