【问题标题】:Character encoding in <form> [duplicate]<form> 中的字符编码 [重复]
【发布时间】:2026-01-24 13:50:02
【问题描述】:

我已经制作了联系表格,但由于我不是英语,所以我使用诸如“á”、“ň”、“š”等字符。 但是当我用这些字符填写表单时,我提交了表单,并收到了电子邮件,其中所有这些“未知”字符都被替换为“@-”等字符。该网站是 .html,而不是 .php。我没有在数据库中存储任何内容。

我放了
&lt;meta charset="UTF-8"&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; in the &lt;head&gt;
我还将&lt;form&gt; 属性修改为&lt;form id="contact-form" action="send_me" enctype="multipart/form-data" accept-charset="utf-8"&gt;
我在我的 php 文件中添加了 header('Content-type: text/html; charset=utf-8');
但没有任何帮助。

这是一段 HTML:

<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

.
.
.

<form id="contact-form" action="send_me" enctype="multipart/form-data" accept-charset="utf-8">
    <div class="field-group">
    <div class="inputgroup">
            <label for="name">Name</label>
            <input id="name" class="text form-input" type="name" name="name"/>
    </div>
    </div>
    <div class="field-group">
    <div class="inputgroup">
        <label for="message">Message</label>
        <textarea id="message" class="text form-input" type="message" name="message">
        </textarea>
    </div>
    </div>
    <div class="field-group">
    <div class="contact-form__button" style="">
        <input role="button" type="submit" name="submit">
    </div>
    </div>
    <div id="odo" class="contact-form__message"></div>
</form>


JS:

$(".form-input").focus(function() {
    let parent = $(this).parent();
    if (!parent.hasClass("active")) {
        parent.addClass("active")
        }
 });
 $(".form-input").blur(function() {
    let self = $(this);
    let parent = self.parent();
    if (parent.hasClass("active") && self.val().length === 0) {
        parent.removeClass("active")
    }
 });
 $("#contact-form").submit(function(e) {
    e.preventDefault();
    const url = "sendMailB.php";
    messageHolder = $(".contact-form__message");
    messageHolder.removeClass();
    messageHolder.text('');
    const successMessage = 'Successfully sent!';
    const errorMessage = 'Oops, try later';
    $.ajax({
        type: "POST",
        url: url,
        data: $("#contact-form").serialize(),
        success: function(data) {
            console.log(data);
                        messageHolder.addClass("success");            
                        messageHolder.text(successMessage);
        },
        error: function(error){
        console.log('error');
        messageHolder.addClass("error");
        messageHolder.text(errorMessage);
            }
    });
 });


PHP:

header('Content-type: text/html; charset=utf-8');
$to = "paula@soulmates.sk";
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$extra = "From email: $email\r\n Answer to email: $email\r\n";<br>
$subject = "Mail from ".$name."";
$odkaz = $message;
$mess = "Name: ".$name."\nEmail: ".$email."\nPhone: ".$phone."\nMessage: ".$odkaz." \n";

$too = $email;
$subjectt = "Thank you for contacting us";
$messs = "Thank you message";
$extraa = "From email: $to\r\n Answer to email: $to\r\n";


mail ($to, $subject, $mess, $extra)
mail ($too, $subjectt, $messs, $extraa);

?>

我只需要用户输入的所有信息,以便按照他们的方式接收。我需要“Safaládka”在收到的电子邮件中保留“Safaládka”,而不是变成例如“SafalˇA-dka”

【问题讨论】:

    标签: php html forms utf-8


    【解决方案1】:

    在邮件函数中将标头作为第四个参数传递。

    mail ($to, $subject, $mess, $header);
    

    【讨论】: