Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Юникод из таблицы на страницу в Win1251
 
 автор: virtus   (29.09.2005 в 11:21)   письмо автору
 
 

Юникод из таблицы на страницу в Win1251
Есть таблица, в которой данные все в юникоде!
Как можно при выводе результатов конвертировать, что бы текст писался русскими или украинскими буквами, а то (вроде) юникод индексируется только некоторыми поисковиками!!!
Помогите, спасибо!

   
 
 автор: cheops   (29.09.2005 в 12:48)   письмо автору
 
   для: virtus   (29.09.2005 в 11:21)
 

На сайте доступна библиотека iconv?

   
 
 автор: virtus   (01.10.2005 в 12:52)   письмо автору
 
   для: cheops   (29.09.2005 в 12:48)
 

да установлена!
но почему то не работает! что не так делаю?

$str=iconv("UTF-8","cp1251","&#1084&#105&#1089&#1090&#1086&#32&#1050&#1080&#105&#1074"); 
print $str; 

печатается все равно &#1084&#105&#1089&#1090&#1086&#32&#1050&#1080&#105&#1074

   
 
 автор: cheops   (01.10.2005 в 13:13)   письмо автору
 
   для: virtus   (01.10.2005 в 12:52)
 

Так это не UNICODE - это HTML-представление, такое часто в базу данных попадает, когда в phpMyAdmin не верно выбрана кодировка перед работой. Можно попытаться конвертнуть данные в обычное представление при помощи функции html_entity_decode()
<?php
  $text 
"&#1084&#105&#1089&#1090&#1086&#32&#1050&#1080&#105&#1074";
  
$arr explode("&",$text);
  unset(
$arr[0]);
  
$text "&".implode(";&"$arr).";";
  echo 
html_entity_decode($textENT_QUOTES"cp1251");
?>

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

   
 
 автор: virtus   (01.10.2005 в 15:38)   письмо автору
 
   для: cheops   (01.10.2005 в 13:13)
 

a как бы еще вставить в этот скрипт этот конвертор!!!
база маленькая, принципе, можно и юзать этот конвертор!
Только у меня получается для каждой записи дублировать, что бы происходило преобразование... как по другому вставить?
И еще некоторые сивмолы и буквы - не конвертятся, а остаются в исходной кодировке, например "-" и "ї". Вот еще бы их как то дописать, что бы конвертились!

<? 
/* Переменные для соединения с базой данных */ 
$hostname "localhost"
$username "roo"
$password ""
$dbName "gg"

/* Таблица MySQL, в которой хранятся данные */ 
$userstable "ff"

/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
/* выбрать базу данных. Если произойдет ошибка - вывести ее */ 
mysql_select_db($dbName) or die(mysql_error()); 

/* составить запрос, который выберет всех клиентов - яблочников */ 
$query "SELECT * FROM $userstable WHERE 1"
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */ 
$res mysql_query($query) or die(mysql_error()); 

/* Как много нашлось таких */ 
$number mysql_num_rows($res); 

/* Напечатать всех в красивом виде*/ 
if ($number == 0) { 
  echo 
"<CENTER><P>нет</CENTER>"
} else { 
  echo 
"<CENTER><P>Количество: $number<BR><BR><table border=1>"
  
/* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */ 
  
while ($row=mysql_fetch_array($res)) { 
    echo 
"<tr><td> ".$row['field0'];
    echo 
"</td><td> ".$row['field1'];
    echo 
"</td><td> ".$row['field2'];
    echo 
"</td><td> ".$row['field3'];
    echo 
"</td><td> ".$row['field4']; 
    echo 
"</td><td> ".$row['field5']; 
    echo 
"</td><td> ".$row['field6']; 
    echo 
"</td><td> ".$row['field7']; 
    echo 
"</td><td> ".$row['field8']; 
    echo 
"</td><td> ".$row['field9'];  
    echo 
"</td></tr>";

  } 
 } 
 
?> 

Спасибо гигамега мозгу cheops'y

   
 
 автор: cheops   (01.10.2005 в 23:20)   письмо автору
 
   для: virtus   (01.10.2005 в 15:38)
 

Самое простое - это оформить функцию
<?php 
  $text 
"&#1084&#105&#1089&#1090&#1086&#32&#1050&#1080&#105&#1074"
  function 
convert_text($text)
  {
    
$arr explode("&",$text); 
    unset(
$arr[0]); 
    
$text "&".implode(";&"$arr).";"
    return 
html_entity_decode($textENT_QUOTES"cp1251"); 
  }
  echo 
convert_text($text);
?>

тогда ваш код может выглядеть следующим образом:
<? 
/* Переменные для соединения с базой данных */ 
$hostname "localhost"
$username "roo"
$password ""
$dbName "gg"

/* Таблица MySQL, в которой хранятся данные */ 
$userstable "ff"

/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
/* выбрать базу данных. Если произойдет ошибка - вывести ее */ 
mysql_select_db($dbName) or die(mysql_error()); 

/* составить запрос, который выберет всех клиентов - яблочников */ 
$query "SELECT * FROM $userstable WHERE 1"
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */ 
$res mysql_query($query) or die(mysql_error()); 

/* Как много нашлось таких */ 
$number mysql_num_rows($res); 

/* Напечатать всех в красивом виде*/ 
if ($number == 0) { 
  echo 
"<CENTER><P>нет</CENTER>"
} else { 
  echo 
"<CENTER><P>Количество: $number<BR><BR><table border=1>"
  
/* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */ 
  
while ($row=mysql_fetch_array($res)) { 
    echo 
"<tr><td> ".convert_text($row['field0']); 
    echo 
"</td><td> ".convert_text($row['field1']); 
    echo 
"</td><td> ".convert_text($row['field2']); 
    echo 
"</td><td> ".convert_text($row['field3']); 
    echo 
"</td><td> ".convert_text($row['field4']); 
    echo 
"</td><td> ".convert_text($row['field5']); 
    echo 
"</td><td> ".convert_text($row['field6']); 
    echo 
"</td><td> ".convert_text($row['field7']); 
    echo 
"</td><td> ".convert_text($row['field8']); 
    echo 
"</td><td> ".convert_text($row['field9']);   
    echo 
"</td></tr>"
  } 

?>

>И еще некоторые сивмолы и буквы - не конвертятся, а остаются в исходной кодировке,
>например "-" и "ї". Вот еще бы их как то дописать, что бы конвертились!
Если база данных не большая, то можно добавить в функцию исключения - приведите пожалуйста эти предложения и их "перевод", у меня под рукой этих символов нет... Если база потом разрастётся - можно будет конвертнуть базу, а код откатить назад.

   
 
 автор: virtus   (03.10.2005 в 11:14)   письмо автору
 
   для: cheops   (01.10.2005 в 23:20)
 

Плохо, в этом варианте переменная $text равен &#1084&#105&#1089&#1090&#1086&#32&#1050&#1080&#105&#1074
а мне нужно, что бы была равно данным с таблицы!!!
И еще - цифры (с таблицы) которые проходять через эту функцию превращаются в "&;" !!! А это не есть гуд :(

   
 
 автор: cheops   (03.10.2005 в 14:35)   письмо автору
 
   для: virtus   (03.10.2005 в 11:14)
 

>Плохо, в этом варианте переменная $text равен
В смысле? Так в коде приведённом выше и подставляются данные из таблицы.

>И еще - цифры (с таблицы) которые проходять через эту функцию превращаются
У меня нет под рукой этой испорченной таблицы - на угад я не могу ничего поправить, приложите дамп таблицы.

   
 
 автор: virtus   (03.10.2005 в 14:45)   письмо автору
 
   для: cheops   (03.10.2005 в 14:35)
 

дамп во вложении!!

   
 
 автор: cheops   (03.10.2005 в 15:22)   письмо автору
 
   для: virtus   (03.10.2005 в 14:45)
 

<? 
/* Переменные для соединения с базой данных */ 
$hostname "localhost"
$username "root"
$password ""
$dbName "UAT"

/* Таблица MySQL, в которой хранятся данные */ 
$userstable "monitors"

/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 
/* выбрать базу данных. Если произойдет ошибка - вывести ее */ 
mysql_select_db($dbName) or die(mysql_error()); 

/* составить запрос, который выберет всех клиентов - яблочников */ 
$query "SELECT * FROM $userstable WHERE 1"
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */ 
$res mysql_query($query) or die(mysql_error()); 

/* Как много нашлось таких */ 
$number mysql_num_rows($res); 

/* Напечатать всех в красивом виде*/ 
if ($number == 0) { 
  echo 
"<CENTER><P>нет</CENTER>"
} else { 
  echo 
"<CENTER><P>Количество: $number<BR><BR><table border=1>"
  
/* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */ 
  
while ($row=mysql_fetch_array($res)) { 
    if(!empty(
$row['field0'])) echo "<tr><td> ".convert_text($row['field0']); 
    if(!empty(
$row['field1'])) echo "</td><td> ".convert_text($row['field1']); 
    if(!empty(
$row['field2'])) echo "</td><td> ".convert_text($row['field2']); 
    if(!empty(
$row['field3'])) echo "</td><td> ".convert_text($row['field3']); 
    if(!empty(
$row['field4'])) echo "</td><td> ".convert_text($row['field4']); 
    if(!empty(
$row['field5'])) echo "</td><td> ".convert_text($row['field5']); 
    if(!empty(
$row['field6'])) echo "</td><td> ".convert_text($row['field6']); 
    if(!empty(
$row['field7'])) echo "</td><td> ".convert_text($row['field7']); 
    if(!empty(
$row['field8'])) echo "</td><td> ".convert_text($row['field8']); 
    if(!empty(
$row['field9'])) echo "</td><td> ".convert_text($row['field9']);    
    echo 
"</td></tr>"
  } 

  function 
convert_text($text
  { 
    if(
$text[0] != '&') return $text;
    
$arr explode("&",$text); 
    unset(
$arr[0]); 
    
$text "&".implode(";&"$arr).";"
    return 
html_entity_decode($textENT_QUOTES"cp1251"); 
  }
?>

   
 
 автор: codexomega   (29.09.2005 в 21:25)   письмо автору
 
   для: virtus   (29.09.2005 в 11:21)
 

У меня тоже база в Unicode.
Я конвертирую так:

    // Encode results to cyrillic
    function encodeCharacters(){
        mysql_query ("set character_set_client='koi8r'"); 
        mysql_query ("set character_set_results='koi8r'"); 
        mysql_query ("set collation_connection='koi8r_general_ci'"); 
    }


Только вам надо заменить koi8r, на win-1251 если не ошибаюсь.

   
 
 автор: Ziq   (30.09.2005 в 06:56)   письмо автору
 
   для: codexomega   (29.09.2005 в 21:25)
 

Только вам надо заменить koi8r, на win-1251 если не ошибаюсь.
Не на win-1251, а на 'cp1251'

<?php 
mysql_query 
("set character_set_client='cp1251'"); 
mysql_query ("set character_set_results='cp1251'"); 
mysql_query ("set collation_connection='cp1251_general_ci'"); 
?> 

   
 
 автор: virtus   (01.10.2005 в 12:50)   письмо автору
 
   для: Ziq   (30.09.2005 в 06:56)
 

спб!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования