标题:使用PHP从PostgreSQL数据库获取数据时缺少换行符
正文:
我在使用PHP从PostgreSQL数据库获取数据时遇到了一个问题。我使用Navicat来查看我的数据库中的数据,它清楚地显示了数据中的换行符(n),如下所示:
addr=1 addr=2 addr=3 addr=4 addr=5 addr=6 j=6 [rs485] comid=1 comid=1 [rs485] baudrate=115200 bdrate=115200 ...
然而,当我使用PHP获取这些数据时,换行符似乎丢失了。以下是我用于获取数据的PHP代码:
$host = '192.168.1.92'; $db = 'GneMaster'; $user = 'postgres'; $pass = '123456'; $dsn = "pgsql:host=$host;port=5432;dbname=$db;options='--client_encoding=UTF8'"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_STRINGIFY_FETCHES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); $id = '648c0d5dae53ac34094ede6d'; $sql = "SELECT responsecontent FROM stationcmd WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':id', $id, PDO::PARAM_STR); $stmt->execute(); while ($row = $stmt->fetch()) { echo "Checking for line breaks: n"; $CRLFPos = strpos($row['responsecontent'], "rn"); $LFPos = strpos($row['responsecontent'], "n"); $CRPos = strpos($row['responsecontent'], "r"); if ($CRLFPos !== false) { echo "CRLF found at position: " . $CRLFPos . "n"; } if ($LFPos !== false) { echo "LF found at position: " . $LFPos . "n"; } if ($CRPos !== false) { echo "CR found at position: " . $CRPos . "n"; } if ($CRLFPos === false && $LFPos === false && $CRPos === false) { echo "No line breaks found in responsecontentn"; } }
这个PHP脚本的输出不包含任何换行符,如下所示:
addr=1addr=2addr=3addr=4addr=5addr=6j=6[rs485] comid=1comid=1[rs485] baudrate=115200bdrate=115200...
为什么我使用PHP获取数据时会丢失换行符,我该如何保留它们?
我希望在使用PHP从PostgreSQL数据库获取数据时能够保留原始的换行符,就像在Navicat中看到的一样。据我了解,当我从数据库中获取一个字符串时,它应该保留所有字符,包括换行符。
我尝试的方法是直接从数据库获取数据并输出它。然而,结果输出中没有包含任何换行符。我还尝试在PHP中查找换行符(n、r、rn),但在我的数据中没有找到这些字符。
我期望的结果是,当我使用PHP获取和输出数据时,它看起来与在Navicat中一样,即数据应该包含换行符。然而,实际结果是我收到的数据不包含换行符。
我也查阅了一些关于PHP和PostgreSQL的文档,但没有找到与此问题相关的信息。我在Stack Overflow和其他相关论坛上进行了搜索,但没有找到类似的问题或解决方案。
我正在寻找一种在PHP中获取数据时保留原始换行符的方法。我对PHP和PostgreSQL有一些了解,但还没有找到解决这个问题的方法。我希望有人能帮助我解决这个问题。
对于造成的混淆我感到抱歉。我提供的PHP代码连接到了位于192.168.1.92的PostgreSQL数据库,但我在Navicat中查看的数据库位于192.168.1.93。位于192.168.1.93的数据库包含换行符,而位于192.168.1.92的数据库则不包含。这种差异导致了我遇到的问题。对于造成的任何混淆,我深感抱歉。