PHP返回结果无法正常显示中文
本帖最后由 20230713G001133 于 2024-7-13 15:32 编辑现在有一个叫做(execute_command.php)的文件
<?php
header('Content-Type: text/html; charset=utf-8');
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$command = $_POST['command'];
$output = shell_exec($command);
$output = htmlspecialchars($output, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); // 转义特殊字符并保持 UTF-8 编码
$output = nl2br($output); // 保持换行格式
echo $output;
} else {
echo "Error: Method not allowed";
}
?>
通过一个HTML发送Post请求(代码如下)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>执行命令示例</title>
<style>
#output {
font-family: SimSun, '宋体', Arial, sans-serif; /* 设置字体为宋体,如果系统不支持宋体,则使用Arial或sans-serif作为备选字体 */
}
</style>
</head>
<body>
<button id="lsCommand">查看目录列表</button>
<button id="ipconfigCommand">查看IP配置</button>
<button id="hostnameCommand">查看主机名</button>
<button id="shutdown">关闭服务器</button>
<button id="restart">重启服务器</button>
<button id="tasklist">进程列表</button>
<div id="output"></div>
<style>
#output {
font-family: SimSun, '宋体', Arial, sans-serif; /* 设置字体为宋体,如果系统不支持宋体,则使用Arial或sans-serif作为备选字体 */
white-space: pre; /* 保留换行符和空格 */
overflow-x: auto; /* 显示水平滚动条 */
max-width: 100%; /* 限制最大宽度,防止内容过宽 */
padding: 10px; /* 添加一些内边距,使内容与边框有一定间距 */
border: 1px solid #ccc; /* 添加边框 */
}
</style>
<script>
// 点击按钮执行命令的函数
function executeCommand(command) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'execute_command.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.onload = function() {
if (xhr.status === 200) {
document.getElementById('output').innerHTML = xhr.responseText;
} else {
document.getElementById('output').innerHTML = 'Error: ' + xhr.status;
}
};
xhr.send('command=' + encodeURIComponent(command));
}
// 给每个按钮添加点击事件处理
document.getElementById('lsCommand').addEventListener('click', function() {
executeCommand('dir'); // Windows下查看目录列表的命令是 dir
});
document.getElementById('ipconfigCommand').addEventListener('click', function() {
executeCommand('ipconfig'); // Windows下查看IP配置的命令是 ipconfig
});
document.getElementById('hostnameCommand').addEventListener('click', function() {
executeCommand('hostname'); // Windows下查看主机名的命令是 hostname
});
document.getElementById('shutdown').addEventListener('click', function() {
executeCommand('shutdown /s /t 0');
});
document.getElementById('restart').addEventListener('click', function() {
executeCommand('shutdown /r /t 0');
});
document.getElementById('tasklist').addEventListener('click', function() {
executeCommand('tasklist');
});
</script>
</body>
</html>
返回结果中文部分无法正常显示
这种情况可能是什么原因造成的
应该怎么解决
修改execute_command.php
<?php
header('Content-Type: text/html; charset=utf-8');
if ($_SERVER["REQUEST_METHOD"] == "POST") {
setlocale(LC_ALL, 'zh_CN.UTF-8');
putenv('LANG=zh_CN.UTF-8');
$command = $_POST['command'];
$output = shell_exec($command);
// 使用 iconv 转换编码
$output = iconv('GBK', 'UTF-8//IGNORE', $output);
$output = htmlspecialchars($output, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
$output = nl2br($output);
echo $output;
} else {
echo "错误:方法不允许";
}
?>
// 将 GBK 编码转换为 UTF-8 编码
$output = mb_convert_encoding($output, 'UTF-8', 'GBK');
// 转义特殊字符并保持 UTF-8 编码
$output = htmlspecialchars($output, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); 编码转U8 VanYun 发表于 2024-7-13 12:53
// 将 GBK 编码转换为 UTF-8 编码
$output = mb_convert_encoding($output ...
3如果这样修改输出就会变成这样
看看数据库的编码格式 1045837055lucy 发表于 2024-7-13 14:06
看看数据库的编码格式
这个不需要数据库的 很明显就是编码问题,转换一下~您用360浏览器切换编码看看是否正常,如果正常。确定编码问题,就是您编码转换时候有问题 浏览器编码问题?
页:
[1]