|
|
|
| Юникод из таблицы на страницу в Win1251
Есть таблица, в которой данные все в юникоде!
Как можно при выводе результатов конвертировать, что бы текст писался русскими или украинскими буквами, а то (вроде) юникод индексируется только некоторыми поисковиками!!!
Помогите, спасибо! | |
|
|
|
|
|
|
|
для: virtus
(29.09.2005 в 11:21)
| | На сайте доступна библиотека iconv? | |
|
|
|
|
|
|
|
для: cheops
(29.09.2005 в 12:48)
| | да установлена!
но почему то не работает! что не так делаю?
$str=iconv("UTF-8","cp1251","мiсто Киiв");
print $str;
|
печатается все равно мiсто Киiв | |
|
|
|
|
|
|
|
для: virtus
(01.10.2005 в 12:52)
| | Так это не UNICODE - это HTML-представление, такое часто в базу данных попадает, когда в phpMyAdmin не верно выбрана кодировка перед работой. Можно попытаться конвертнуть данные в обычное представление при помощи функции html_entity_decode()
<?php
$text = "мiсто Киiв";
$arr = explode("&",$text);
unset($arr[0]);
$text = "&".implode(";&", $arr).";";
echo html_entity_decode($text, ENT_QUOTES, "cp1251");
?>
|
Ситуация усугубляется тем, что почему-то отсутствуют ; в конце каждого символа, для нормально работы функции их приходится добавлять искусственно. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: virtus
(01.10.2005 в 15:38)
| | Самое простое - это оформить функцию
<?php
$text = "мiсто Киiв";
function convert_text($text)
{
$arr = explode("&",$text);
unset($arr[0]);
$text = "&".implode(";&", $arr).";";
return html_entity_decode($text, ENT_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>";
}
}
?>
|
>И еще некоторые сивмолы и буквы - не конвертятся, а остаются в исходной кодировке,
>например "-" и "ї". Вот еще бы их как то дописать, что бы конвертились!
Если база данных не большая, то можно добавить в функцию исключения - приведите пожалуйста эти предложения и их "перевод", у меня под рукой этих символов нет... Если база потом разрастётся - можно будет конвертнуть базу, а код откатить назад. | |
|
|
|
|
|
|
|
для: cheops
(01.10.2005 в 23:20)
| | Плохо, в этом варианте переменная $text равен мiсто Киiв
а мне нужно, что бы была равно данным с таблицы!!!
И еще - цифры (с таблицы) которые проходять через эту функцию превращаются в "&;" !!! А это не есть гуд :( | |
|
|
|
|
|
|
|
для: virtus
(03.10.2005 в 11:14)
| | >Плохо, в этом варианте переменная $text равен
В смысле? Так в коде приведённом выше и подставляются данные из таблицы.
>И еще - цифры (с таблицы) которые проходять через эту функцию превращаются
У меня нет под рукой этой испорченной таблицы - на угад я не могу ничего поправить, приложите дамп таблицы. | |
|
|
|
|
|
|
|
для: cheops
(03.10.2005 в 14:35)
| | дамп во вложении!! | |
|
|
|
|
|
|
|
для: 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($text, ENT_QUOTES, "cp1251");
}
?>
|
| |
|
|
|
|
|
|
|
для: 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 если не ошибаюсь. | |
|
|
|
|
|
|
|
для: 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'");
?>
|
| |
|
|
|
|
|
|
|
для: Ziq
(30.09.2005 в 06:56)
| | спб! | |
|
|
|