如何为此PHP文件添加UTF-8支持?这样文本就会出现乱码。 我尝试添加一些我在网上找到的代码,但它没有用......
这是我的原始代码。问题是为UTF-8支持添加什么。
<?php
/*
This first bit sets the email address that you want the form to be submitted to.
You will need to change this value to a valid email address that you can access.
*/
$webmaster_email = "natalie@cakery.co.il";
/*
This bit sets the URLs of the supporting pages.
If you change the names of any of the pages, you will need to change the values here.
*/
$feedback_page = "contact.html";
$error_page = "thanks.html";
$thankyou_page = "thanks.html";
/*
This next bit loads the form field data into variables.
If you add a form field, you will need to add it here.
*/
$Name1 = $_REQUEST['Name1'] ;
$Name2 = $_REQUEST['Name2'] ;
$Phone = $_REQUEST['Phone'] ;
$email_address = $_REQUEST['email_address'] ;
$comments = $_REQUEST['comments'] ;
/*
The following function checks for email injection.
Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
*/
function isInjected($str) {
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str)) {
return true;
}
else {
return false;
}
}
// If the user tries to access this script directly, redirect them to the feedback form,
if (!isset($_REQUEST['email_address'])) {
header( "Location: $feedback_page" );
}
// If the form fields are empty, redirect to the error page.
elseif (empty($email_address) || empty($comments)) {
header( "Location: $error_page" );
}
// If email injection is detected, redirect to the error page.
elseif ( isInjected($email_address) ) {
header( "Location: $error_page" );
}
// If we passed all previous tests, send the email then redirect to the thank you page.
else {
mail( "$webmaster_email", "Feedback Form Results",
$comments, "From: $email_address" );
header( "Location: $thankyou_page" );
}
?>
答案 0 :(得分:4)
您希望发送符合UTF8标准的电子邮件,然后我想您可以尝试在发送电子邮件之前对$comments
进行UTF8编码:
$comments = utf8_encode($comments);
但无法保证,因为这完全取决于您的应用程序(特别是收集这些评论的部分)是如何工作的,它已经使用了什么编码,以及{{1本身是建立的。
$comments
(以及我的建议)根据假设进行操作,您看到“乱码”的原因是您实际上是以UTF为幌子发送Latin1编码8;但是你的问题可能会有所不同,而且没有看utf8_encode
(最重要的是,$comments
的十六进制转储),猜测是任何人都可以做的最好的
另一种可能性(正好相反)是你将未经广告的UTF8发送给将其解码为ISO-8859-15的人。在这种情况下,您应正确宣传重新编码内容的内容类型,而不是,并将proper extra headers添加到$comments
功能。
我推荐deceze的链接,即使第二个可能看起来因为它将我的建议归类为“虚假承诺”: - )
好的,让我们说运行
mail()
让你变得奇怪。以上来自某种形式;您需要检查显示该表单的页面的编码。假设您已在“Name1”字段中输入值“Léon”。然后,如果您在上面添加指令
$Name1 = $_REQUEST['Name1'];
接收页面应该终止并显示十六进制字符串。如果在UTF8中正确接收到名称,则应该说die(bin2hex($Name1));
。但是如果您运行的是ISO-8859-15,您将看到4cc3a96f6e
,这意味着您需要更改传输表单的编码(以便它传输良好的UTF8),或者您必须4ce96f6e
1}}输入:
utf8_encode
当然,您可能也会收到陌生人的十六进制代码:$Name1 = utf8_encode($_REQUEST['Name1']);
,也许。
如果您收到4c826f6e
但仍然无效,则问题是不在传输表单或接收PHP中,但稍后。例如,当您显示字符串时。 该页面可能采用ISO-8859-15编码,输出良好的UTF8将无效。如果是这种情况,您应该通过提供
4cc3a96f6e
如果该页面中的其他文本显示为中断,则表示该页面已由ISO-8859-15编辑器编辑;所以它包含ISO-8859-15特殊字符,你可以正确看到ISO编码,但转换到UTF-8时没有更多。在这种情况下,您需要在其他所有内容之前转换文件,并从现在开始使用UTF编辑器。