用fopen打开.txt文件会创建多余的空行

时间:2019-04-06 21:20:31

标签: php vb.net fopen

我正在尝试在vb.net中生成一个字符串,然后将其发送到我的服务器,并将其发送到.php文件,该文件应将该字符串附加到.txt文件中。字符串中有多行。该字符串正确到达php文件。但是,在写入.txt文件的过程中,php会创建多余的空白行,这是我不希望的。

我想要的.txt文件中的内容:

line1
line2
line3

我得到的是

line1

line2

line3

我尝试更改fopen调用的参数(在参数中添加b以强制采用二进制模式),但这无济于事。我还尝试在vb.net代码中用“ \ n”和“ \ r \ n”替换vbNewLine来分隔字符串中的行,但不幸的是,这种情况无法识别,并像

line1 \r\n line2 \r\n line3

这是我的vb.net应用程序代码:

   function sendStringToServer()
      Dim stringToSend as String
      stringToSend = "line1" & vbNewline
      stringToSend &= "line2" & vbNewline
      stringToSend &= "line3"

      Dim wc As New WebClient
      wc.Headers("content-type") = "application/x-www-form-urlencoded"
      Dim response As String = wc.UploadString("http://www.example.com/uploaddata.php", "data=" & data)
      MessageBox.Show(response)

(请注意,响应是正确的,没有多余的空行。) 并且有upploaddata.php代码:

<?php
    if (isset($_POST["data"]))
    {
        echo($_POST["data"]);
        $data=$_POST['data'];
        $fp = fopen('data.txt', 'ab');
        fwrite($fp, $data);
        fclose($fp);
    }
    else
    {
        echo "ERROR: No data!";
    }
?>

我在做什么错了?

编辑:被要求做一个最小,完整和可验证的示例后,我要粘贴代码和结果:

在vb.net应用程序中,将字符串发送到uploaddata.php的Sub:

   function sendStringToServer()
      Dim stringToSend as String
      stringToSend = "line1" & vbNewline & "line2" & vbNewline & "line3"

      Dim wc As New WebClient
      wc.Headers("content-type") = "application/x-www-form-urlencoded"
      Dim response As String = wc.UploadString("http://www.example.com/uploaddata.php", "data=" & data)
      MessageBox.Show(response)

整个uploaddata.php内容:

<?php
    if (isset($_POST["data"]))
    {
        var_dump($_POST['data']);
        $data=$_POST['data'];
        file_put_contents('data.txt', $data);
    }
    else
    {
        echo "ERROR: No data!";
    }
?>

在vb.net应用程序中调用sendStringToServer()之后,data.txt的内容:

line1

line2

line3

1 个答案:

答案 0 :(得分:0)

一些建议,其中一项有望解决您的问题。尝试使用deprecated而不是使用<div id = "myDiv"> <p> This is the first paragraph tag in the div.</p> <p> I will try to loop through this div tag.</p> <p> In order to get all of the elements used.</p> <p> As well as the text in this div.</p> </div> <script> var myDiv = document.getElementById("myDiv"); var pTags = myDiv.childNodes; var text = ' '; //creating iterator for pTags for (var i = 0; i < pTags.length; i++;){ //check for nodeType == text type if (pTags[i].nodeType == 3){ //combine nodevalue to one string text += pTags[i].nodeValue; } } //alert said string alert(text); </script> (即using vbLf BTW)。使用它们之前,请确保您的值是trimmed前导和尾随空格(我假设您的实际代码将使用变量。)此外,在作为POST数据发送之前,您的字符串还必须正确URL encoded

vbNewLine

在PHP方面,您可以使用function sendStringToServer() Dim stringToSend as String stringToSend = Trim("line1") & vbLf stringToSend &= Trim("line2") & vbLf stringToSend &= Trim("line3") stringToSend = HttpUtility.UrlEncode(stringToSend) Dim wc As New WebClient wc.Headers("content-type") = "application/x-www-form-urlencoded" Dim response As String = wc.UploadString("http://www.example.com/uploaddata.php", "data=" & stringToSend) MessageBox.Show(response) 而不是旧的file_put_contentsfopenfwrite三人来简化代码。

fclose