Въпрос : контактна форма - проблем с кирилицата

DevNull

Registered
Здравейте.
Ползвам Цък .

Като се изпрати писмо кирилицата я показва с разни йероглифи.

-> От:
%u0421%u0442%u0430%u043D%u0438%u0441%u043B%u0430%u0432

-> Причина за съобщението:
Запитване

-> Съобщение:
%u0442%u0435%u0441%u0442

Полето Причина за съобщение е <select></select>
 
Пред всяка заявка слагай това към базата или го сложи в connect файла

PHP:
mysql_query("SET NAMES utf8");
:)
 
Лошото е че тук изобщо не се ползват базаданни . просто взима информацията от $_GET и я праща като имейл.
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
// тук сложи кода
</body>
</html>
 
Същата история .

-> Дата:
21:27:23/24.04.2013

-> От:
%u0421%u0442%u0430%u043D%u0438%u0441%u043B%u0430%u0432

-> Причина за съобщението:
Запитване

-> Съобщение:
%u0437%u0434%u0440%u0430%u0441%u0442%u0438.
 
А виж дали проблема не идва още от mail.html може и там да направиш с това което написах последното..ако не стане моите идеи свършват :?
 
PHP:
<?php


$to='имеил за връзка';

$msg=$_GET["message"];
$headers = 'From: '.$_GET["from"].'\r\n';
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$name=$_GET['name'];
$subject='contact form';
$msg="\nMessage from: ".$name."\r\nwith email address: ".$headers."\r\n".$msg;
if( !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_GET['from']))
{
die('Грешен меил адрес');
}
echo 'Съобщението изпратено успешно';
mail($to1, $subject, $msg, $headers);
?>
 
Се същото си е. Както каза mail.html също е със utf-8

ето и сорс кода от писмото

Received: by sea.nezirus.com (Postfix, from userid 33)
id 28A98762264; Wed, 24 Apr 2013 21:46:15 +0300 (EEST)
To: info @nezirus.com
Subject: Online Form: Запитване
X-PHP-Originating-Script: 33:send.php
From: test @abv.bg
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
X-Mailer: PHP/5.3.10-1ubuntu3.6
Message-Id: <20130424184615.28A98762264@sea.nezirus.com>
Date: Wed, 24 Apr 2013 21:46:15 +0300 (EEST)

-> Дата:
21:46:15/24.04.2013

-> От:
%u0430%u0441%u0435%u043D

-> Причина за съобщението:
Запитване

-> Съобщение:
%u0430%u0441%u0435%u043D%u0430%u0441%u0435%u043D%u0430%u0441%u0435%u043D
 
http://forums.phpfreaks.com/topic/190219-mail-form-doesnt-send-russiancyrillic-characters-correctly/

Мисля, че този "колега" има подобен проблем
 
Така е защото url-то кодира кирилицата. Трябва да използваш функцията urldecode, която декодира кодираното съобщение. Ето така:

$from = urldecode($_GET['from']);
$to = urldecode($_GET['to']);
$message = urldecode($_GET['message']);
//и т.н.
mail();

Аз бих сложил "съобщението е изпратено успешно" след функцията за мейл, защото ако нещо се обърка, да не бъде заблуден потребителя.
 
Тая контактна форма стана златна егати.....

Код:
var xmlHttp 
function GetXmlHttpObject() 
{ 
var xmlHttp=null; 

try 
{ 
// Firefox, Opera 8.0+, Safari 
xmlHttp=new XMLHttpRequest(); 
} 
catch (e) 
{ 
// Internet Explorer 
try 
{ 
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch (e) 
{ 
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
} 
return xmlHttp; 
} 

function sendmail(){ 


var name = document.getElementById('name').value; 
var email = document.getElementById('email').value; 
var subject = document.getElementById('subject').value; 
var message = document.getElementById('message').value; 
var kod = document.getElementById('kod').value; 


name = escape(name); 
message = escape(message); 

xmlHttp=GetXmlHttpObject() 

if (xmlHttp==null){ 

alert ("Browser does not support HTTP Request") 

return 

} 

var url="send.php?from="+email+"&name="+name+"&subject="+subject+"&message="+message+"&kod="+kod

url=url+"&sid="+Math.random() 


xmlHttp.onreadystatechange=stateChangedmail 

xmlHttp.open("GET",url,true) 

xmlHttp.send(null) 
} 

function stateChangedmail() { 

if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 

document.getElementById("msg").innerHTML=xmlHttp.responseText 

} 

}

Това ми е JS-то . може то да дава накакъв дефект....

send.php
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<? 
$to = "";
$from = urldecode($_GET["from"]);
$body = urldecode($_GET["message"]); 
$sub = urldecode($_GET["subject"]);
$name = urldecode($_GET['name']); 
$kod = $_GET['kod'];
$ip=$_SERVER['REMOTE_ADDR'];
$date=date("H:i:s/d.m.Y");
$headers .= 'From: '.$from . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8"  . "\r\n";
$headers .='X-Mailer: PHP/' . phpversion();
// Additional headers

if( !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_GET['from'])) 
{ 
die('Invalid mail'); 
} 
else if($kod!=$_COOKIE['email'])  {
die('Wrong anti-bot'); 
}
echo 'Благидаря ви. Съобщението е изпратено и ще получите отговор възможно най-бързо.'; 
mail($to, 'Online Form: '.$sub, "-> IP:\n".$ip."\n\n"."-> Дата:\n".$date."\n\n"."-> От:\n".$name."\n\n"."-> Причина за съобщението:\n".$sub."\n\n"."-> Съобщение:\n".$body, $headers); 
?> 
</body>
</html>
 

Back
Горе