Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Как поменять кодировку ТОЛЬКО для одного поля INPUT text?
Если это вообще возможно на html, php или JScrypt...

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Xttx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть страница полей. ХТМЛ форма, одним словом. На ней заполняеться дюжина полей включая текстовые. Данные для их заполнения беруться из MySQL базы. После субмит-а, данные возвращаються обратно в базу.
 
Установка чарсета по умолчанию - Windows-1251 (не помню точно циферку...), кодировка базы - UTF-8. До тех пор пока писали латиницей - никаких проблем это не вызывало. Кириллицей, потенциально, можно заполнить только одно текстовое поле, и кодировку всех страниц из-за этого менять не хотелось бы. Кодировку базы менять нельзя.
 
При вызове данных - вся кирилица заменяеться вопросами. Остаються только знаки препинания.
При вводе данных в базу - в поле таблицы появляеться один непонятный символ: какой-то квадрат, типа [], только одним символом.
 
Искал в нете, нашёл что при декларировании поля можно написать:
<input type="text, name="name", accept-charset="UTF-8">
однако не прошло...
 
В пхп нашёл функцию - mb_convert_encoding(что, во_что, из_чего),
но строчка:
<input type="text, name="name", value="<? echo mb_convert_encoding($r['field'], "UTF-8", "WINDOWS-1521"); ?>"> - также результата не дала.
 
Если это в принципе возможно, научите пожалуйсто
Заранее спасибо!

Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 08:18 09-04-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xttx

Цитата:
Искал в нете, нашёл что при декларировании поля можно написать:
<input type="text, name="name", accept-charset="UTF-8">  

впервые слышу
 

Цитата:
В пхп нашёл функцию - mb_convert_encoding(что, во_что, из_чего),  

сравни

Цитата:
<? echo mb_convert_encoding($r['field'], "UTF-8", "WINDOWS-1521"); ?>

что и во что пытаешься изменить? совет.. работай полностью в utf

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:46 09-04-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xttx
Что подразумевается под "кодировка базы - UTF-8"?  
1) Для таблиц прописан charset=utf8
2) Данные передаются в UTF-8
3) Что-то еще...

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 13:36 10-04-2007
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IMHO проще так:
1) все в mysql оставить в UTF8
2) на странице прописать <meta ... charset="windows-1251">
3) после подключения к mysql дать команду "SET NAMES cp1251"
мускул сам должен сконвертировать данные в CP1251->UTF8 при вводе, а при выводе перекодировать UTF8->CP1251
Или, как верно заметил Cheery, страницу тоже выводить в UTF8 (указать в meta) и работать только с данными UTF8.

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 17:18 10-04-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У тэга FORM есть атрибут ENCTYPE, определяеющий, каким образом данные из формы будут закодированы для передачи обработчику. Может этим воспользоваться?
 

Цитата:
При вызове данных - вся кирилица заменяеться вопросами

Пробовал перед SQL запросом данных из БД выполнить

Код:
mysql_query('SET NAMES cp1251;');

м???

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 17:27 10-04-2007
Xttx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
пытаюсь изменить из UTF в WINDOWS кодировку переменной $r['field'],  
полностью в UTF работать немогу, придёться весь сайт переписывать.
 
dacuan
"Что подразумевается под "кодировка базы - UTF-8"? "
Для таблиц прописан charset=utf8 и collision тоже.
 
Kokoc
"после подключения к mysql дать команду "SET NAMES cp1251"  
мускул сам должен сконвертировать данные в CP1251->UTF8 при вводе, а при выводе перекодировать UTF8->CP125"
А вот это дело! Сейчас пойду пробовать!!!
 
Jokerjar
"У тэга FORM есть атрибут ENCTYPE, определяеющий, каким образом данные из формы будут закодированы для передачи обработчику. Может этим воспользоваться?"
Там форма большая очень.... хотелось бы всё таки поменять одно поле а не всю форму. Впрочем если не получиться, сделаю как ты сказал.
 
Пробовал перед SQL запросом данных из БД выполнить  
Код:mysql_query('SET NAMES cp1251;');  
не пробовал Пошёл пробовать....

Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 16:29 12-04-2007
Xttx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такс.
Значиться вот это вот: "mysql_query('SET NAMES cp1251;');" помогло при выводе данных (огромный шаг вперёд!!!). Однако при вводе, в базу опять заноситься квадрат. Если писать латиницей то всё ок. Пробовал ставить эту комманду перед каждым запросом, но не помогло.
С выводом разобрались, что можно сделать с вводом??? :/
 
 
и ещё, ма-аленький вопросик, там в таблице, генерируються кнопки "Изменить", в каждой строчке, с именам chng1, chng2, chng10, chng500... есть-ли возможность узнать на какую кнопку нажали не проверяя их по одной if ($post_['chng1'] != "") {}, if ($post_['chng2'] != "") {}, if ($post_['chng3'] != "") {}...)  на полтысячи кнопок довольно весомый скрипт получаеться... Циклами пользоваться умею, но не знаю как подставлять циклическую переменную непосредственно в имя другой переменной....

Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 18:37 12-04-2007 | Исправлено: Xttx, 18:44 12-04-2007
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я понял твою проблему.
Только что создал тестовую базу в Mysql 5.0 в UTF8, и скрипт PHP тоже в UTF8.  
Под Мозиллой все отлично, а под IE 6.0 SP1 действительно квадраты.
 
В общем, так (при условии что у тебя БД и таблицы в UTF8):
1) Если страница (форма) в кодировке UTF8 (<meta ... charset=utf-8">), то сразу после mysql_connect() сделать mysql_query("SET NAMES UTF8")
 
2) Если у тебя страница в windows-1251, то нужно давать запрос "SET NAMES CP1251"
 
Но старые данные, внесенные до изменения кодировки, будут выводиться квадратами или "?".
 
IMHO IE старается перекодировать страницу в cp1251  и получается белиберда.
 
 
P.S. Еще теоретически в HTML в теге INPUT есть атрибут LANG (напр. LANG="ru").
Также (теоретически) на обработку может влиять тэг <!DOCTITLE ...>
 
Кстати, не перепутай "UTF-8" и "UTF8"

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 20:10 12-04-2007 | Исправлено: Kokoc, 20:42 12-04-2007
Xttx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уй!
Спасибо тебе за эксперемент!
Мозиллу я-то поставить могу, но 98 процентов юзеров сидят с експлоуерами, и хотелось бы всё таки что бы им сайт тоже был виден.
 
Страница в кодировке Windows.
При выводе информации из базы (UTF-8) в текстовое поле, комманда SET NAMES CP1251 помогла. И всё читаемо.
 
Однако, при попытке ВВЕСТИ эту информацию ОБРАТНО В БАЗУ, уже в базе получаються вопросы, со знаками препинания.
 
Т.е. СКуЛ после комманды SET NAMES CP1251 выдаёт информацию в кодировке win, но вот при попытке ввести текст в кодировке windows в поле таблицы с кодировкой UTF-8, эта комманда не помогает.
 
Атрибут LANG не поможет. Он устанавливает язык, а не кодировку. Вообще не знаю для чего это надо....
 
Про тэг <!DOCTITLE>  ничего не знаю. У меня три книжки (2 по пхп и одна чисто про ХТМЛ), и нигде про это не упоминаеться.

Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 21:19 12-04-2007
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xttx
Не <!DOCTITLE>, а <!DOCTYPE..>
 
И посмотри внимательнее на пост Kokoc от 20:10 12-04-2007 (пункты 1 и 2)

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:32 13-04-2007
Xttx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
1) Если страница (форма) в кодировке UTF8 (<meta ... charset=utf-8">), то сразу после mysql_connect() сделать mysql_query("SET NAMES UTF8")  
 
2) Если у тебя страница в windows-1251, то нужно давать запрос "SET NAMES CP1251"  

 
Посмотрел внимательно.
Страница в кодировке windows.
запрос "SET NAMES CP1251" даю и перед выводом и перед вводом.
На вывод работает, на ввод - нет.
 
 
А средствами пхп или JScrypt кодировку нельзя поменять? Из Windows в UTF-8? В обратном направлении всё уже работает.

Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 12:47 13-04-2007
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Xttx
Цитата:
 
Страница в кодировке Windows.
При выводе информации из базы (UTF-8) в текстовое поле, комманда SET NAMES CP1251 помогла. И всё читаемо.
 
Однако, при попытке ВВЕСТИ эту информацию ОБРАТНО В БАЗУ, уже в базе получаються вопросы, со знаками препинания.  

 
Т.е. записываешь, сразу читаешь в той же странице, в той же ее кодировке 1251 - и вопросы/квадраты?
И откуда знаешь, что в базе "квадраты", а не правильные символы. Чем (в чём) смотришь?
Для каждого клиента (и страницы html/php) нужно давать SET NAMES исходя из той кодировки, в которой он работает (напр. для консольного win-клиента mysql.exe это 'set names cp866', для unix-клиента будет "set names koi8r").  
 
Посмотри также скрипты - может, у тебя где-то закрывается mysql_close(), а потом снова mysql_connect(), но далее запросы без предварительного "set names".
 
Вот мой рабочий скрипт (index.php):

Код:
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
  $link = mysql_connect("localhost","root","");
  mysql_select_db("test");
  mysql_query("SET NAMES UTF8");
  if($_SERVER['REQUEST_METHOD'] === 'POST') {
    print "ID=".$_POST['ID'].", name=".$_POST['NAME']."</p>";
    $id = intval($_POST['ID']);
    if($id>0) {
      $name = $_POST['NAME'];
      $query="INSERT INTO foo (id,name) VALUES (".$id.",'".$name."')";
      mysql_query($query);
    }
  } // end if
?>
<form method="POST" action="index.php">
<input type="text" name="ID"><BR>
<input type="text" name="NAME">
<input type="submit">
</form>
<table border="1">
<?
  $res = mysql_query("SELECT * FROM foo");
  while($data = mysql_fetch_assoc($res)) {
    print "<tr><td>".$data['id']."</td><td>".$data['name']."</td></tr>\n";
  }
  mysql_close($link);
?>
</table></body></html>
 

И создание базы данных:

Код:
 
CREATE DATABASE test DEFAULT CHARACTER SET UTF8;
USE test;
CREATE TABLE foo (id int, name varchar(100)) DEFAULT CHARACTER SET UTF8;
 

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 15:59 13-04-2007
Xttx



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kokoc
Ну, у тебя всё просто, там и страница и база в UTF-8...
 
В общем разобрался я. То есть, нельзя сказать что разобрался, но методом эксперемента зароботало. Поменял в базе Collation поля из "utf8_unicode_ci" в "utf8_general_ci", и всё теперь работает. И на ввод и на вывод. Что это такое - хоть убей не знаю, но работает.
 
СПАСИБО ВСЕМ КТО ОКАЗАЛ ПОМОЩЬ, В ОСОБЕННОСТИ Kokoc

Всего записей: 539 | Зарегистр. 04-07-2002 | Отправлено: 22:45 13-04-2007
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Как поменять кодировку ТОЛЬКО для одного поля INPUT text?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru

Рейтинг.ru