вставка ô в базу данных mysql является частью результатов Rhône в Rh - PullRequest
2 голосов
/ 08 августа 2011

Когда я вставляю строку «Rhône» в мою базу данных, остается только «Rh». Как это возможно?Использует Mysql с кодировкой utf8_general_ci.

<?php
header( 'Content-Type: text/html; charset=utf-8' );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Decode</title>
<head></head>
<body>
<?php
include_once ($_SERVER['DOCUMENT_ROOT'] . '/v3/functions/connect.php');

$res_id = $_POST['res_id'];
$yr_id = $_POST['yr_id'];

$yr_id=html_entity_decode($yr_id, ENT_COMPAT, "UTF-8");


 if(isset($yr_id) && $yr_id<>'') {

$search  = array('%C3%B4');
$replace = array('ô');
$yr_id=str_replace($search, $replace, $yr_id);



 mysql_query("SET NAMES utf8");
   $uQuery2="UPDATE sv_snowrepublic set yr_id='$yr_id' where res_id=$res_id limit 1";
  $uResult2  = mysql_query($uQuery2);
  echo 'updated';

  } 







  $uQuery1="SELECT * FROM sv_snowrepublic where res_id=$res_id limit 1";
  $uResult1  = mysql_query($uQuery1);
  $row1 = mysql_fetch_assoc($uResult1);


if (mysql_num_rows($uResult1) >= 1 && isset($res_id) && $res_id>2)

     {
echo "<form method='POST' action='index.php'>";
echo "<input type='hidden' size='4' value='" . $row1['res_id'] . "' name='res_id'  /><br />";

$yr2_id=$row1['yr_id'];
// $yr2_id=html_entity_encode($yr2_id, ENT_COMPAT, "UTF-8");
echo mb_detect_encoding($yr2_id);

echo "<input type='text' size='200' value='" . $yr2_id . "' name='yr_id'  /><br />";
echo "<br /><label for='submit'></label><input  type='submit' name='submit' value=' Send '></form>";
        }       


?>

</body>
</html>

Ответы [ 3 ]

2 голосов
/ 08 августа 2011

Как это возможно?

У вас возникла проблема с переносом строки Rhône в базу данных MySQL. Это может иметь несколько причин, наиболее вероятно, что один из задействованных компонентов (наиболее вероятно, MySQL как сервер или клиент) работает над строкой с указанной кодировкой, которая не соответствует позиции символа, которую вы обычно называете ô. Поскольку это первая позиция, кодировка выглядит неверной, она будет обрезана.

Вы должны при любых обстоятельствах и без каких-либо ошибок, даже самых незначительных в конфигурации, убедиться, что кодировка обрабатываемых данных всегда ясна, правильно настроена и правильно обработана.

Это как для ввода в вашу базу данных, так и для получения данных из вашей базы данных.

На ум приходит следующее:

  • Вы не сохраняете свой php-файл, закодированный как UTF-8, на диск.

Далее:

  • Вы не используете рекомендуемое клиентское расширение MySQL.
  • Вы используете SET NAMES вместо правильной настройки параметров кодирования соединения. См. mysql_set_charset Документы .

Проверьте это, но это только предположение, может быть много причин, почему это происходит.

1 голос
/ 08 августа 2011

Вы также должны установить кодировку соединения на UTF-8. Попробуйте

SET NAMES UTF-8

после подключения, до первого запроса

0 голосов
/ 08 августа 2011

Если вы используете функции mysql_ *, вам необходимо убедиться, что вы экранировали строку с помощью mysql_real_escape_string (), однако рекомендуется использовать подготовленные операторы с использованием PDO или mysqli.

...