换行符的编码方式错误



问题:

我有两个文本区域,第一个用于将文本发送到数据库(mysql(,第二个用于显示检索到的文本。但是,第一个换行符的换行符不会应用于第二个。

示例:

hello
world

将显示如下:

hello world

当我检查我在$_POST中发送的数据时,我发现换行符被转换为这个">

Array ( [memo_1] => fff ggg bbb )

url编码如下:

memo_1: eee%E3%80%80ddd

为了简洁起见,从数组中删除了其他数据。

我尝试了什么:

我试着使用nl2br,但由于这段文字中没有,它不起作用。我尝试使用str_replace将这些字符更改为,但也没有成功。

我不知道为什么会出现这些奇怪的字符,因为我已经将编码设置为UTF-8,如果这不是编码相关的问题,我很抱歉。

更新:

PHP:5.6.38

mysql:5.7.24,表排序规则为'utf8_general_ci'

该项目在一个流浪箱中进行:centos 6

保存:

include('./common/env.php');
include('./login_manager.php');
$virgin             = $_POST['virgin'];
$memo_1             = $_POST['memo_1'];
$memo_2             = $_POST['memo_2'];
$call_counterpart       = $_POST['call_counterpart'];
$call_status            = $_POST['call_status'];
$recall_time_temp       = $_POST['recall_time'];
$sql = "UPDATE call_history SET ";
$sql .= "memo_1 = '$memo_1', ";
$sql .= "memo_2 = '$memo_2', ";
$sql .= "call_status    = '$call_status', ";
$sql .= "call_counterpart   = '$call_counterpart', ";
if ($recall_time != "") {
$sql .= "recall_time    = '$recall_time', ";
$sql .= "recall_flag        = '1', ";
}
$sql .= "active_flag    = '1' ";
$sql .= "WHERE id = '$history_id' ";
}
mysql_query($sql);`

检索:

$sql = "SELECT c.*, s.name staff_name ";
$sql        .= "FROM call_history c ";
$sql        .= "LEFT JOIN staff s ON c.staff_id = s.id ";
$sql        .= "WHERE 1 ";
$sql        .= "AND c.active_flag = 1 ";
$sql        .= "ORDER BY c.id DESC ";
$rs         = mysql_query($sql);

看来故障根本不在编码中。该公司的另一位开发人员编写了一些代码行,这些代码干扰了发送到服务器的数据,我必须修复这些数据才能发送有效数据。

ps:我还是公司的新员工,因此不知道数据被修改的原因,并认为这是一个编码问题。

最新更新