【发布时间】:2020-10-02 17:42:06
【问题描述】:
我 [大部分] 成功地从 WAMP PHP 环境迁移到 LAMP 环境并且一切正常,除了我发现当我将特殊字符发布到 php 时,然后在 WAMP 上我得到发布的结果,但在 LAMP 上,我的结果中出现了一些 Â 字符)。
我有一个简单的php演示页面如下:
<?php
echo "<html>";
echo "<head>";
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";
echo "</head>";
echo "<body>";
$testcol="test2";
if ( isset($_POST[$testcol])) {
//echo "<LI>".str_replace("[", "<BR>[",print_r(getallheaders(), true));
echo "<LI>".getallheaders()['Content-Type'];
echo "<LI> POST Encoding = ".mb_detect_encoding($_POST[$testcol], 'UTF-8', true);
echo "<LI> _POST = ".htmlentities($_POST[$testcol], ENT_QUOTES)."<HR>";
$fn=ini_get('error_log').'.encoding_test.txt';
file_put_contents($fn, $_POST[$testcol]);
echo "Result stored in $fn<HR>";
}
$test="\"<lOR+EMØ>&"."'£$"."¥©Ȏ4$"."€";
echo "<LI>adjusted=".htmlspecialchars($test, ENT_QUOTES)."<BR>";
echo "<HR>";
echo "
<form method='post' action='" . $_SERVER['SCRIPT_NAME'] . "'>
<input type='text' name='test1' value='".addslashes($test)."'>
<textarea name='test2'>$test</textarea>
<input type='submit' value='Submit'>
</form>";
echo "</body>";
echo "</html>";
?>
当我运行它并点击 WAMP 环境中的 [提交] 按钮** - 然后查看我看到的 encoding_test.txt 文件:
"<lOR+EMØ>&'£$¥©Ȏ4$€
但是当我在 LAMP 上运行它并查看 encoding_test.txt 文件时,我看到了:
"<lOR+EMÃ>&'£$¥©È4$â¬
为什么会这样?是否有服务器设置或我缺少的东西?
谢谢 安倍
** 请注意,在浏览器上 - WAMP 和 LAMP 之间的一切看起来都一样 - 我只是在服务器端看到了不同
附言。两次运行都显示“POST Encoding = UTF-8” 聚苯乙烯。我在 Apache/2.4.6 (CentOS) PHP/7.0.33 上运行,并比较了工作 LAMP 和我自己的 LAMP 之间的 php.ini 文件和 Apache 服务器信息(通过“SetHandler server-info”)和结果显示没有明显差异(文件夹/文件名等除外)
【问题讨论】:
-
在检查其他环境(WAMPS 和 LAMPS)时,我发现了混合的结果。没有明确的模式。
标签: php apache character-encoding