PHP问题:浏览MySQL数据库表格时,为啥部分字段显示有乱码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP问题:浏览MySQL数据库表格时,为啥部分字段显示有乱码?相关的知识,希望对你有一定的参考价值。

能给出具体的原因和解决的方法吗?谢谢……

中文乱码问题经常会出现
1、数据库、数据表、字段 编码格式要保持一致
2、如果在doc界面录入数据,要保持当前编码格式与数据表编码格式一致
3、php读取数据显示,要保持文件的编码格式、html页面的编码格式同数据库一致,编码格式为utf-8或gb2312或gbk
4、php连接数据库之后mysql_query('set names gbk');
参考技术A 以前的字符集和现在的数据库字符集不一样 如果是新建的可以自己设置下 如果以前有的 那么想想别的办法吧 毕竟 这样难解决 参考技术B 请设置mysql连接字符集

PHP 为啥 $_SESSION 变量拒绝在浏览器关闭时取消设置?

【中文标题】PHP 为啥 $_SESSION 变量拒绝在浏览器关闭时取消设置?【英文标题】:PHP why is $_SESSION variable refusing to unset on browser close?PHP 为什么 $_SESSION 变量拒绝在浏览器关闭时取消设置? 【发布时间】:2018-11-29 08:44:53 【问题描述】:

我对 php 比较陌生,但我遇到了一个让我发疯的错误。

我正在创建一个网页,让您可以浏览服务器上的文件。

但是,由于某种原因,$_SESSION 变量会保持自己的设置,即使在浏览器重新启动之后...

求求你,在我发疯之前告诉我为什么会发生这种情况。

这是我的代码:

<html>
<?php
session_start();
if(!isset($_GET['location'])) 
    header('Location: ?location=G:');
    session_unset();

/* THIS IS WHERE THE BUG OCCURS. THIS VARIABLE SHOULD BE EMPTY ON BROWSER OPEN!!!! ?!?!?!?! I HAVE ADDED NOTHING TO SESSION YET*/
var_dump($_SESSION);
if(!isset($_SESSION['path'])) 
                $_SESSION['path'] = array();
                $_SESSION['path'][0] = $_GET['location'];
            
echo '<br><br><br><br><br><br>';
//* If user presses back and isn't in home folder, return to previous folder... *//
if(isset($_GET['back']) && $_GET['back'] == true && sizeof($_SESSION['path']) > 0) 
                unset($_SESSION['path'][sizeof($_SESSION['path'])-1]);
                $_GET['location'] = $_SESSION['path'][sizeof($_SESSION['path'])-1];
                header ('Location: ?back=false');
             else 
                //*However if user hasn't pressed back make sure that session is properly updated with location *//
                if($_SESSION['path'][sizeof($_SESSION['path'])-1] != $_GET['location']) 
                    array_push($_SESSION['path'], $_GET['location']);
                
            
            //*Now build the link from the session path array*//
            $full_link = '';
            for($i = 0; $i < sizeof($_SESSION['path']); $i++) 
                $full_link .= $_SESSION['path'][$i];
                $full_link .= '/';
            
            //*Get all files from link path*//
            $filesbrowsed = glob($full_link . '*');
?>
    <head>
        <meta charset "utf8">
        <title>File Browser</title>
        <link href="filebrowserstyle.css" rel="stylesheet" type="text/css">
    </head>
    <body>
        <header>
            <ul class = "navigation">
                <li><a href = "">Home</a></li>
                <li><a href = "?back=true">Back</a></li>
                <li><a href = ""></a></li>
                <li><a href = ""></a></li>
            </ul>
        </header>
        <div class = 'current_files'>
            <?php
            //* Now display all files in current path *//
            for($i = 0; $i < sizeof($filesbrowsed); $i++) 
                $filename = substr($filesbrowsed[$i], strlen($full_link), strlen($filesbrowsed[$i]) - strlen($full_link));
                echo '<div><a href = "?location=' . $filename . '/' . '">' . $filename . '</a></div>';
            
            ?>
        </div>
    </body>
</html>

提前谢谢大家!!!

【问题讨论】:

请注意,如果我删除脚本的一大块 $_SESSION 变量正常开始为空数组,并且在我的 php.ini 中会话 cookie 时间设置为 0,所以问题是在我的脚本中的某个地方......但我无法为我的爱弄清楚在哪里 您可能希望避免使用全部大写,因为它通常用于表示 SHOUTING,这会让您感到粗鲁。 同时,这里有很多代码,不清楚其中哪一部分与您的实际问题有关。尝试将edit问题降为minimal reproducible example;目标是用最小的代码来演示问题,清楚地描述当前的行为是什么,以及你想要/期望的行为是什么。 您是否尝试过使用其他浏览器? IIIRC,如果您使用“在浏览器启动时恢复我的上一个会话”之类的内容,某些/所有浏览器仍会保留您的 cookie/会话 【参考方案1】:

删除会话中的所有数据:

$_SESSION = [];

【讨论】:

我不希望每次用户刷新页面时都取消会话... 当 url 中没有“位置”时你想要它吗? 坦率地说,这行有点不必要。我只是在试验这个问题时把它留在那里。主要问题是,如果我刚刚打开浏览器,开始时的 var_dump 应该返回一个空数组,但事实并非如此。不管我是否用一行代码取消它。根据定义,会话应在浏览器关闭时取消设置.. 会话不会因为浏览器关闭而在服务器上过期。【参考方案2】:

您应该在将用户重定向到另一个位置之前取消设置会话。

<html>
<?php
session_start();
if(!isset($_GET['location'])) 
    session_unset();
    session_destroy();
    header('Location: ?location=G:');

/* THIS IS WHERE THE BUG OCCURS. THIS VARIABLE SHOULD BE EMPTY ON BROWSER OPEN!!!! ?!?!?!?! I HAVE ADDED NOTHING TO SESSION YET*/
var_dump($_SESSION);

【讨论】:

以上是关于PHP问题:浏览MySQL数据库表格时,为啥部分字段显示有乱码?的主要内容,如果未能解决你的问题,请参考以下文章

word转换成PDF格式 为啥部分字没了呢

为啥MySql的表记录中有些中文显示问号

既然可以只使用 MySQL 数据库,为啥还要创建对象?

php在连接mysql时为啥会包这样的错误?

为啥设置“可见性:隐藏”时表格单元格边框在谷歌浏览器中消失和“边界崩溃:崩溃;”?

phpmyadmin - 浏览表格选项变灰但浏览不同的值显示表格数据