换行符的编码方式错误

时间:2018-12-08 04:10:09

标签: php character-encoding

问题:

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

示例:

hello
world

将显示如下:

hello world

当我检查在$ _POST中发送的数据时,我发现换行符已转换为此'ã€'

Array ( [memo_1] => fff ggg bbb )

和经过编码的网址是这样的:

memo_1: eee%E3%80%80ddd

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

我尝试过的方法:

我尝试使用nl2br,但由于本文中没有\ n,因此无法使用。 我尝试使用str_replace将这些字符更改为\ n,但也没有用。

我不确定为什么会显示这些奇怪的字符,因为我已将编码设置为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);

1 个答案:

答案 0 :(得分:0)

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

ps:我还是公司的新人,因此无法理解为什么修改数据并认为这是编码问题。