За последние 24 часа нас посетили 18352 программиста и 1605 роботов. Сейчас ищут 934 программиста ...

Помогите исправить ошибку с кодировкой...

Тема в разделе "PHP для новичков", создана пользователем beki007, 8 янв 2012.

  1. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    Здравствуйте, вот я написал небольшой сайт работающий без перезагрузки страниц, с использованием jquery,

    Но есть проблемы:
    1. с кодировкой, я на всех страницах ставил кодировку на windows-1251, и когда заходишь на сайт в браузере, сначала нормально отображается, но когда переходишь к другим ссылкам отображает квадратики или вопросики,

    2. с формой обратной связи, оно по идее конечно должен отправить данные на указанную почту, (почта на мейл.ру), приходит письмо, но без никаких данных, который указывал пользователь, вот оно:
    Ваше имя: = (Здесь пусто!)
    Ваш-mail: =
    Контактный телефон: =
    Описание =
    Host: 195.38.174.108
    Time: 10:07:16 on 8/01/12

    как решить проблемы помогите пожалуйста,,, (((, Заранееблагодарен
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    По поводу кодировки: попробуй в самом-самом начале скриптов, которые отдают браузеру ответы на jQuery-запросы добавить отправку заголовка с явным указанием кодировки:

    header('Content-type: text/html; charset=Windows-1251');

    Если не прокатит, то, видимо, придётся в этих скриптах перед отправкой данных преобразовывать их в UTF-8 и ставить соответствующий заголовок.

    По поводу пустого письма: мы тут понятия не имеем, что там у тебя за скрипт, что ты там накодил такое. И, по-этому, понятия не имеем, почему поля в отправляемом письме пустые и подсказать что-либо сложно.
     
  3. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А какой смысл писать такой сайт? Эксперимент? Это просто страница с динамическим контентом, не сайт. Поисковик запомнит только то, что загрузилось в виде html, проиндексирует только главную страницу.
    1. Про кодировку уже (почти) все поняли, что лучше использовать utf-8. С ajax загрузкой контента (в твоем случае других страниц внутрь главной страницы) будет меньше проблем.
    2. Насчет формы обратной связи - без конкретного кода никто не догадается, как ты реализовал отправку email :))

    PS. Эх, sobachnik опередил.
     
  4. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    <? header('Content-type: text/html; charset=utf-8'); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>................</html>

    вот так правильно?

    и насчет формы отправки давайте я вам отправлю код в ЛС...
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Не, зачем в ЛС? Выкладывай тут, кто захочет помочь и разобраться - тот поможет.
     
  6. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    а это безопасно??? весь код опубликовать всем???
     
  7. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Что значит "безопасно"? Многие показывают - ничего, вроде, не жаловались потом. Но в принципе, если кто-то посмотрит твой код, найдёт в нём большую проблему и не напишет тебе об этом, а захочет воспользоваться для своих личных целей (при этом будет знать адрес твоего сайта, на котором этот код работает) - то да, у него будет такая возможность. Может всё сломать, стереть всё из б.д. или "вирусный JavaScript" какой-нибудь приделать и т.п., в зависимости от того, что именно за проблема в коде.

    Но обычно весь код не вываливают на форум. Кому захочется копаться в большой-большой куче кода за бесплатно? Да ещё и написанного новичком - а значит высока вероятность того, что код плохо оформлен и вообще содержит много всяких... "странных конструкций" :)

    Когда есть конкретный вопрос - показывают конкретный фрагмент кода, в котором происходит то самое что-то непонятное, о чём задаётся вопрос. Обычно достаточно 20-30 строчек. Бывает и 2-3 строк достаточно, чтобы найти проблему.
     
  8. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    С кодировкой разобрался спасибо... Но форма отправки еще под вопросом...
     
  9. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Код нужно сюда по-любому, а не в ЛС. У меня сейчас сервер не работает, и в приоритете дети и жена. Так что быстро потестировать не смогу.
    Из того, что бросилось в глаза сразу. Вот так проверять наличие переданных параметров не хорошо.
    PHP:
    1. <?php
    2. if ($_POST['imya'] != "" && $_POST['email'] && $_POST['opisanie'] ) {
    3. //другой код
    4. }
    Сначала нужно удостовериться, что параметры вообще есть, потом проверить их на пустоту (или лучше на количество символов, или лучше очистить сначала от мусора):
    PHP:
    1. <?php
    2. if(isset($_POST['imya']) && isset($_POST['email']) && isset($_POST['opisanie']) && !empty($_POST['imya']) && strlen(trim($_POST['email']))>4 && strlen($_POST['opisanie'])>2){
    3. //код
    4. }
    Второе, что бросилось в глаза, переменные не проинициализированы перед применением. Где-то вначале нужно присвоить им хоть нули хоть пустые строки.
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Проблема в том, что ты используешь несуществующие переменные. Время register_globals уже давно прошло. Нужно указывать конкретно $_POST, $_GET и т.п., а не просто название переменной. То есть не

    PHP:
    1. <?php
    2. // ...
    3. $body="
    4. Ваше имя: = $imya
    5. Ваш e-mail: = $email
    6. Контактный телефон: = $phone
    7. Описание = $opisanie
    8. Host: $host
    9. Time: $ts";
    , а:
    PHP:
    1. <?php
    2. // ...
    3. $body="
    4. Ваше имя: = " . $_POST['imya'] . "
    5. Ваш e-mail: = " . $_POST['email'] . "
    6. Контактный телефон: = " . $_POST['phone'] . "
    7. Описание = " . $_POST['opisanie'] . "
    8. Host: $host
    9. Time: $ts";
     
  11. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    Благодарю за помощь, уже отправляет на почту, но вот такие непонятные данные:

    п▓п╟я┬п╣ п╦п╪я▐: = п▒п╣п╨я┌я┐я─
    п▓п╟я┬ e-mail: = wwwbekikg@gmail.com
    п п╬п╫я┌п╟п╨я┌п╫я▀п╧ я┌п╣п╩п╣я└п╬п╫: = 0556580802
    п·п©п╦я│п╟п╫п╦п╣ = п▒п╦я│п╪п╦п╩п╩п╟я┘п╟я─я─п╟я┘п╪п╟п╫п╦я─я─п╟я┘п╦п╧п╪, п©п╬п╤п╟п╩я┐п╧я│я┌п╟ я│я─п╟п╠п╟я┌я▀п╡п╟п╧ ...
    Host: 212.42.100.172
    Time: 12:13:08 on 9/01/12

    Как решать, по моему пробл с кодировкой???
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Четвёртым параметром в функцию mail() передаются заголовки, которые должны быть отправлены вместе с письмом. Вот передавай туда одним из заголовков кодировку твоего письма.

    Примеры тут:
    http://ru2.php.net/manual/ru/function.mail.php
     
  13. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    Супер сработало, спасибо вам большое...
    сделал так:
    $email = "From: Form <$to>" . "\r\n";
    $email .= 'Content-type: text/html; charset=utf-8' . "\r\n";