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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

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

xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общим такая проблема, есть подписка на email рассылку все работает нормально, но вот мучает меня одна проблема, суть в том, что когда выводишь чекбокс в форму (выбор отдельной категории подписки) то текст этого чекбокса в неправильной кодировке, собственно нужна помощь в этом деле, где в этом коде нужно прописать кодировку?
 
код который у меня располагается на странице сайта
 

Код:
<?php
define("DEBUG", 0);
require "podpiska_mail/admin/class/class.exception_mysql.php";
require "podpiska_mail/admin/class/class.exception_object.php";
require "podpiska_mail/admin/class/class.exception_member.php";
try
{
    require_once "podpiska_mail/admin/lib/functions.inc";
    require_once "podpiska_mail/admin/lib/connect.inc";
 
?>
    <form action=<?php echo('podpiska_mail/sendmail.php');?> accept-charset="utf-8" method="post">    
        <div class="demo-list clear" id="optin">        
            <h2>Будь В Курсе Новых Событий На Сайте!</h2>
            <div>Подпишись <strong>прямо сейчас</strong>, и получай эксклюзивные обновления на свой E-Mail:</div>
            <p><img class="arrow" src="images/arrow.png" /></p>
                <input name="name" class="name" type="text" value="Введите Ваше Имя" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" />
                <input name="email" class="email" type="text" value="Введите Ваш E-Mail" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" />
                <h1>подписка</h1>
                <div class="checkbox">
                <?php
    $query = "SELECT * FROM ".DB_CAT."";
    $result = $dbh->query($query);
 
    if(!$result) { throw new ExceptionMySQL($dbh->error,$query,"Error executing SQL query!");}
     
    if($result->num_rows>0)
    {
        while($row = $result->fetch_array())
        
        {
            echo "<p><input type=\"checkbox\" value=\"".$row['id_cat']."\" name=\"id_cat[]\">".$row['name']."</p>";
        }
    }
?>        </div>        <div class="con">
                <input type="submit" value="ПОДПИСАТЬСЯ!" /></div>
                <input type=hidden name=action value=post>
            <div class="con2"><img class="lock" src="images/lock.gif" /><p> Ваш E-Mail полностью защищён</p></div>
        </div>        
    </form>    
    <?php
 
    $dbh->close();
}
catch(ExceptionObject $exc)
{
    require_once("podpiska_mail/admin/lib/exception_object_debug.inc");
}
catch(ExceptionMySQL $exc)
{
    require_once("podpiska_mail/admin/lib/exception_mysql_debug.inc");
}
catch(ExceptionMember $exc)
{
    require_once("podpiska_mail/admin/lib/exception_member_debug.inc");
}
?>

 
 
 
 
 
а вот код файла sendmail.php
 
 
 
 
Подробнее...
Где в этом коде нужно указать кодировку?
У меня на странице кодировка windows-1251.
вот ссылка на сайт автора http://janicky.com/php-scripts/pochtovaya-rassylka там же можете скачать исходники

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 22:29 08-04-2014 | Исправлено: Cheery, 23:25 08-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx
1) указываем язык в названии темы
2) так проблема с кодировкой на странице или же в почтовом сообщении??
то есть проблема с отображением здесь?  

Цитата:
$row['name']

3) MySQL: Проблема с кодировками

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:56 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет на самой странице, в админке, и в базе данных кодировка выводится что надо, но вот на странице крокозябры.
устанавливал я кодировку для
<code>$row['name']</code>
вот в таком виде
<code>$row['name'] = 'Content-type: text; charset=windows-1251';$row['name']</code>

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:08 08-04-2014
Cheery



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

Цитата:
<code>$row['name'] = 'Content-type: text; charset=windows-1251';$row['name']</code>

что это??
 

Цитата:
но вот на странице крокозябры

тогда зачем sendmail.php скрипт нам нужен?
 

Цитата:
mysql_query("set CHARACTER SET cp1251");  

делаете аналогично в коде, что выводит список на странице?


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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:10 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mysql_query("set CHARACTER SET cp1251");  
Все это я уже делал и в коде прописывал и на странице

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:20 08-04-2014
Cheery



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

Цитата:
Все это я уже делал и в коде прописывал и на странице

показывайте как..
плюс для вывода страницы нужно указывать ее кодировку
до вывода чего либо в браузер сделать
header('Content-Type: text/html; charset=windows-1251');  
 
и перед работой с mysql добавить еще и  
mysql_query('SET NAMES cp1251');
 
это все указано в теме по ссылке выше

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:21 08-04-2014 | Исправлено: Cheery, 23:22 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Весь текст отображаеться нормально, это только текст чекбоксов в не той кодировке...Я даже не догадываюсь где он формеруется перед тем как вывестись в форму

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:24 08-04-2014
Cheery



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

Цитата:
Я даже не догадываюсь где он формеруется перед тем как вывестись в форму

он берется из базы.  
а значит перед обращением в базу вы неправильно указываете кодировку для работы
 

Цитата:
mysql_query('SET NAMES cp1251');


Цитата:
mysql_query("set CHARACTER SET cp1251");

должно быть до
Цитата:
$query = "SELECT * FROM ".DB_CAT."";  

 
и я спрячу sendmail.php - он тут ни к селу, ни к городу

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:25 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вот код который у меня выводится на странице
<?php
header('Content-Type: text/html; charset=windows-1251');  
define("DEBUG", 0);
require "podpiska_mail/admin/class/class.exception_mysql.php";
require "podpiska_mail/admin/class/class.exception_object.php";
require "podpiska_mail/admin/class/class.exception_member.php";
try
{
    require_once "podpiska_mail/admin/lib/functions.inc";
    require_once "podpiska_mail/admin/lib/connect.inc";
 
?>
    <form action=<?php echo('podpiska_mail/sendmail.php');?> accept-charset="utf-8" method="post">    
        <div class="demo-list clear" id="optin">        
            <h2>Будь В Курсе Новых Событий На Сайте!</h2>
            <div>Подпишись <strong>прямо сейчас</strong>, и получай эксклюзивные обновления на свой E-Mail:</div>
            <p><img class="arrow" src="images/arrow.png" /></p>
                <input name="name" class="name" type="text" value="Введите Ваше Имя" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" />
                <input name="email" class="email" type="text" value="Введите Ваш E-Mail" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" />
                <h1>подписка</h1>
                <div class="checkbox">
                <?php
    $query = "SELECT * FROM ".DB_CAT."";
    $result = $dbh->query($query);
 
    if(!$result) { throw new ExceptionMySQL($dbh->error,$query,"Error executing SQL query!");}
    if($result->num_rows>0)
    {
        while($row = $result->fetch_array())
        
        {
            echo "<p><input type=\"checkbox\" value=\"".$row['id_cat']."\" name=\"id_cat[]\">".$row['name']."</p>";
        }
    }
?>        </div>        <div class="con">
                <input type="submit" value="ПОДПИСАТЬСЯ!" /></div>
                <input type=hidden name=action value=post>
            <div class="con2"><img class="lock" src="images/lock.gif" /><p> Ваш E-Mail полностью защищён</p></div>
        </div>        
    </form>    
    <?php
 
    $dbh->close();
}
catch(ExceptionObject $exc)
{
    require_once("podpiska_mail/admin/lib/exception_object_debug.inc");
}
catch(ExceptionMySQL $exc)
{
    require_once("podpiska_mail/admin/lib/exception_mysql_debug.inc");
}
catch(ExceptionMember $exc)
{
    require_once("podpiska_mail/admin/lib/exception_member_debug.inc");
}
?>
вот как это все выглядит и где крокозябры
 

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:35 08-04-2014
Cheery



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

Цитата:
вот как это все выглядит и где крокозябры  

там, где "крякозябры", говорит о том, что либо страница, либо содержимое в базе у вас совсем не в 1251, а в уникоде!
тогда вам нужно либо дополнительно перекодировать результаты из базы, либо указывать UTF-8 кодировку.
 
ссылка на страницу есть?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:37 08-04-2014 | Исправлено: Cheery, 23:38 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот именно их бы и перекодировать перед тем как они будут браться с бд

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:41 08-04-2014
Cheery



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

Цитата:
перекодировать перед тем как они будут браться с бд

http://www.php.net/manual/en/book.iconv.php
вы уже используете ее в sendmail.php
 
но лучше чтобы все было в одной кодировке, и не перекодировать каждый раз при выводе, а один раз перед занесением в базу.
 
совет - пользуйтесь уникодом, тогда не нужно ломать голову где когда и как перекодировать.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:42 08-04-2014 | Исправлено: Cheery, 23:43 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никогда не пользовался уникодом (даже представления не имею как и что это) может потому что только начал разбираться с бд и php.
В общим я так понял дело глухо.

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:53 08-04-2014
Cheery



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

Цитата:
В общим я так понял дело глухо.

я же дал вам функцию.
 

Цитата:
.$row['name'].

вот это и перекодируете перед выводом.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:53 08-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно пример как перекодировать перед выходом .$row['name']. с этой функцией

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 23:58 08-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx
а по ссылке сходить? там все примеры внизу.  
я не знаю в какой кодировке у вас страница (по настоящему), чтобы сказать точно из чего и во что нужно копировать.  
 
ну, предположим, что  
 echo "<p><input type=\"checkbox\" value=\"".$row['id_cat']."\" name=\"id_cat[]\">".iconv("UTF-8", "cp1251", $row['name'])."</p>"
 
а может и наоброт - для этого точно нужно знать в какой кодировке страница и данные в базе.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:00 09-04-2014 | Исправлено: Cheery, 00:01 09-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
СПС большое заработало, я и так знаю в какой кодировку у меня страница и бд в cp1251

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 00:07 09-04-2014
Cheery



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

Цитата:
я и так знаю в какой кодировку у меня страница и бд в cp1251

раз заработало, значит страница в 1251, а информация в базе в уникоде - гляньте collation у базы и таблиц.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:12 09-04-2014 | Исправлено: Cheery, 00:23 09-04-2014
xxxZISxxx

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нашёл где подключается бд, в файле connect.inc, так фот там в подключении к бд стоит $db_charset = "cp1251"; если поставить UTF8 юникод не работает.

Всего записей: 50 | Зарегистр. 14-06-2013 | Отправлено: 00:54 09-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
xxxZISxxx
данные значения могли быть внесены в таблицу ранее
я не могу ничего сказать, не имея доступа к системе.
 
но выбирается из базы уникод, иначе бы не нужен был iconv

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:59 09-04-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Нужна помощь с кодировкой


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru