Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Форма обратной связи - кракозябры!

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Как и где прописать charset ???
dr.grotesque
Отправлено: 25 Апреля, 2014 - 21:45:57
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Это уже отчаяние! Весь день пытаюсь заставить эту форму обратной связи перестать слать кракозябры вместо русских букв в сообщении! Там всего три поля: имя, email, сообщение. Как задать им нужную кодировку?? Прошу Вас, вставьте мне в этот код заветную строчку, чтобы оно заработало! Уже в настройках сервера менял кодировку на utf-8 и windows-1251 - результат НОЛЬ! Я просто уже ничего не могу с этим сделать...

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. /*
  4. Template Name: Contact
  5. */
  6. if(isset($_POST['submitted'])) {
  7.                 //Check to make sure that the name field is not empty
  8.                 if(trim($_POST['contactName']) === '') {
  9.                         $nameError = __("You forgot to enter your name.", "site5framework");
  10.                         $hasError = true;
  11.                 } else {
  12.                         $name = trim($_POST['contactName']);
  13.                 }
  14.  
  15.                 //Check to make sure sure that a valid email address is submitted
  16.                 if(trim($_POST['email']) === '')  {
  17.                         $emailError = __("You forgot to enter your email address.", "site5framework");
  18.                         $hasError = true;
  19.                 } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
  20.                         $emailError = __("You entered an invalid email address.", "site5framework");
  21.                         $hasError = true;
  22.                 } else {
  23.                         $email = trim($_POST['email']);
  24.                 }
  25.  
  26.                 //Check to make sure message were entered
  27.                 if(trim($_POST['message']) === '') {
  28.                         $messageError = __("You forgot to enter your message.", "site5framework");
  29.                         $hasError = true;
  30.                 } else {
  31.                         if(function_exists('stripslashes')) {
  32.                                 $message = stripslashes(trim($_POST['message']));
  33.                         } else {
  34.                                 $message = trim($_POST['message']);
  35.                         }
  36.                 }
  37.  
  38.                 //If there is no error, send the email
  39.                 if(!isset($hasError)) {
  40.                         $msg .= "------------User Info------------ \r\n"; //Title
  41.                         $msg .= "User IP : ".$_SERVER["REMOTE_ADDR"]."\r\n"; //Sender's IP
  42.                         $msg .= "Browser Info : ".$_SERVER["HTTP_USER_AGENT"]."\r\n"; //User agent
  43.                         $msg .= "User Come From : ".$_SERVER["HTTP_REFERER"]; //Referrer
  44.  
  45.                         $emailTo = ''.of_get_option('veecard_contact_email').'';
  46.                         $subject = 'Contact Form Submission From '.$name;
  47.                         $body = "Name: $name \n\nEmail: $email \n\nMessage: $message \n\n $msg";
  48.                         $headers = 'From: '.get_bloginfo('name').' <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
  49.  
  50.                         if(mail($emailTo, $subject, $body, $headers)) $emailSent = true;
  51.  
  52.         }
  53.  
  54. }
  55. get_header();
  56. ?>
  57.  
  58.  
  59.  
  60.          <article>
  61.  
  62.                         <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
  63.  
  64.                         <header>
  65.                                 <h1><?php the_title(); ?></h1>
  66.                         </header>
  67.  
  68.                         <section>
  69.                         <?php the_content(); ?>
  70.                         <?php endwhile; endif;?>
  71.  
  72.                         <p class="error" <?php if($hasError != '') echo 'style="display:block;"'; ?>><?php _e('There was an error submitting the form.', 'site5framework'); ?></p>
  73.  
  74.                         <p class="thanks"><?php _e('<strong>Thanks!</strong> Your email was successfully sent. We should be in touch soon.', 'site5framework'); ?></p>
  75.  
  76.                         <!-- contact form -->
  77.                         <form id="contactform" method="POST">
  78.                  <div class="form-row">
  79.                      <div class="input col_half first">
  80.                          <label for="name"><?php _e("Name", "site5framework"); ?><sup>*</sup></label>
  81.                          <input type="text" id="name" name="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" class="requiredField"/>
  82.                                 <span class="error" <?php if($nameError != '') echo 'style="display:block;"'; ?>><?php _e("You forgot to enter your name.", "site5framework");?></span>
  83.                      </div>
  84.                      <div class="input col_half">
  85.                          <label for="email"><?php _e("Email", "site5framework"); ?><sup>*</sup></label>
  86.                          <input type="text" id="email" name="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="requiredField email"/>
  87.                                   <span class="error" <?php if($emailError != '') echo 'style="display:block;"'; ?>><?php _e("You forgot to enter your email address.", "site5framework");?></span>
  88.                      </div>
  89.                  </div>
  90.                  <div class="form-row">
  91.                      <div class="input textarea">
  92.                          <label for="message"><?php _e("Message", "site5framework"); ?><sup>*</sup></label>
  93.                          <textarea cols="20" rows="7" id="message" name="message" class="requiredField"><?php if(isset($_POST['message'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['message']); } else { echo $_POST['message']; } } ?></textarea>
  94.                                   <span class="error" <?php if($messageError != '') echo 'style="display:block;"'; ?>><?php _e("You forgot to enter your message.", "site5framework");?></span>
  95.                      </div>
  96.                  </div>
  97.                  <div class="form-row">
  98.                                         <input type="hidden" name="submitted" id="submitted" value="true" />
  99.                                         <input type="submit" value="<?php _e('Send', 'site5framework'); ?>" class="modern socle" />
  100.                  </div>
  101.              </form>
  102.              <!-- end contact form -->
  103.  
  104.                 </section>
  105.         </article>
  106.  
  107. <?php get_footer(); ?>
  108.  
 
 Top
KingStar
Отправлено: 25 Апреля, 2014 - 23:09:25
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




1. кодировка файла utf-8 без BOM
2. в htaccess прописать
CODE (htmlphp):
скопировать код в буфер обмена
  1. AddDefaultCharset UTF-8

3. в начале файла php прописать
PHP:
скопировать код в буфер обмена
  1. header('Content-Type: text/html; charset=utf-8');

(Добавление)
и еще, если в базу заносишь, то и она должна быть в соответствующей кодировке


-----
То что программа работает, не означает что она написана правильно!
 
 Top
dr.grotesque
Отправлено: 25 Апреля, 2014 - 23:27:14
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




htaccess я уже чуть ли не по всем папкам разбросал с этой фразой. В настройках сервера ставил глобально UTF-8.

А "в начале файла php" - это где? Какой это будет номер строчки из присланного мною кода? Просто я этот header (в разных вариациях) так же уже прописывал везде где только можно и не можно. По прежнему получаю письма типа: Р СѓСЃСЃРєРёР№ язык
Файл пробую сохранять во всех возможных кодировках - ничего. Укажите номер строчки, это единственное...
Тот, кто этот код написал предложил (в ответ на схожий вопрос) такую строчку:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $headers .= "Content-Type: text/plain; charset=utf-8\n";

и предложил воткнуть это в строку, например, 49. Но куда бы я что ни втыкал - по-прежнему шлет кракозябры! Я уверен, что есть какое-то простое решение, но я его в упор не вижу...

(Отредактировано автором: 25 Апреля, 2014 - 23:57:59)

 
 Top
Ramzes
Отправлено: 26 Апреля, 2014 - 21:47:47
Post Id



Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




AddDefaultCharset на php никакого воздействия не окажет

Пропиши в .htaccess

CODE (htmlphp):
скопировать код в буфер обмена
  1. php_value default_charset utf-8
 
 Top
KingStar
Отправлено: 26 Апреля, 2014 - 22:08:24
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




header - это заголовок, и он всегда ставится в начале файла, после тега php

Цитата:
AddDefaultCharset на php никакого воздействия не окажет


окажут заголовки и кодировка самого файла
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     header('Content-Type: text/html; charset=utf-8');


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Ramzes
Отправлено: 26 Апреля, 2014 - 22:23:38
Post Id



Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Цитата:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-Type: text/html; charset=utf-8');


Зачем в каждый отдельно стоящий php файл это прописывать эту штуку, если можно один раз прописать default_charset ? Эффект тот же самый, возни меньше.

(Отредактировано автором: 26 Апреля, 2014 - 22:24:04)

 
 Top
KingStar
Отправлено: 26 Апреля, 2014 - 22:35:19
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




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


-----
То что программа работает, не означает что она написана правильно!
 
 Top
dr.grotesque
Отправлено: 26 Апреля, 2014 - 23:10:11
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Да это тема (шаблон) для WordPress. По идее, отправкой писем должен заниматься файл WordPress, а не эта конкретная форма. Но я там все перерыл и везде стоит charset utf-8, а где не стоит, то вообще к делу не относится (менял). Есть там такой файл class-phpmailer.php вот там много чего прописано про отправку сообщений, но я его даже удалял, а письма все равно идут!
Это обсуждение вот отсюда (очень конкретно описывается проблема): http://searchtimes[dot]ru/template-p[dot][dot][dot]em/topic4852[dot]htm

К сожалению, предложенные советы не помогли: что htaccess, что хэдэры - про прежнему шлет кракозябры. Сижу с карманным декодером... он мне при переводе показывает CP1251 → UTF-8, т.е. сообщения приходят в кодировке w-1251, причем только тело сообщения - заголовок "от кого" пишет правильно (в юникоде).
(Добавление)
Если проблема только с телом сообщения, возможно, можно что-то сделать со строчкой № 47 ? Можно как-нибудь туда впихнуть charset или какой-нибудь iconv ??

(Отредактировано автором: 26 Апреля, 2014 - 23:58:38)

 
 Top
KingStar
Отправлено: 27 Апреля, 2014 - 20:44:46
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




причем здесь phpMailer, если ты отправляешь через встроенный mail? Сделай инклуд phpMailer, и отправляй через него, и будет тебе счастье


-----
То что программа работает, не означает что она написана правильно!
 
 Top
dr.grotesque
Отправлено: 27 Апреля, 2014 - 21:32:03
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Я сам ничего не сделаю, ибо я не программист и разбираюсь с этим тыково-интуитивным способом. Мне будет счастье, только если кто-нибудь скажет что, как и где прописать, чтобы тело сообщение приходило в юникоде?
 
 Top
KingStar
Отправлено: 27 Апреля, 2014 - 22:25:48
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




чисто пример

PHP:
скопировать код в буфер обмена
  1. require("путь/phpMailer.php");
  2.  
  3. $mail = new PHPMailer();
  4.  
  5. $mail->From = $From;      //  от кого (e-mail)
  6. $mail->AddAddress($Address); //  кому (e-mail)
  7. $mail->Subject = $Subject; // название письма
  8. $mail->Body = $Body; // текст письма
  9. $mail->Send();


-----
То что программа работает, не означает что она написана правильно!
 
 Top
dr.grotesque
Отправлено: 27 Апреля, 2014 - 22:33:06
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Большое спасибо за пример! Но таких примеров у меня много на других сайтах, исправно работающих. Мне бы сохранить ЭТУ форму. Просто заставить ее работать правильно. Она меня устраивает во всем, кроме кракозябр - это единственный косяк.
 
 Top
KingStar
Отправлено: 28 Апреля, 2014 - 01:08:00
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




PHP:
скопировать код в буфер обмена
  1. ...
  2.  
  3. $headers  = 'MIME-Version: 1.0' . "\r\n";
  4. $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  5. $headers .= 'From: '.get_bloginfo('name').' <'.$emailTo.'>' . "\r\n";
  6. $headers .= 'Reply-To: ' . $email . "\r\n";
  7.  
  8. if(mail($emailTo, $subject, $body, $headers)) $emailSent = true;
  9.  
  10. ...

(Отредактировано автором: 28 Апреля, 2014 - 01:10:42)



-----
То что программа работает, не означает что она написана правильно!
 
 Top
dr.grotesque
Отправлено: 28 Апреля, 2014 - 11:23:29
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




KingStar!!!!!!!! ЗАРАБОТАЛО!!!!!!! Вы оказались спасением, ниспосланным свыше! Как долго я это ковырял!.. Спасибо Вам огромное!

Вот в чем была моя ошибка:

Моя строчка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $headers .= "Content-Type: text/plain; charset=UTF-8\n";


Ваша (правильная) строчка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $headers .= 'Content-type: text/plain; charset=utf-8' . "\n\n";
 
 Top
KingStar
Отправлено: 28 Апреля, 2014 - 13:38:20
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)






а



Улыбка


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB