【问题标题】:keep the text format when i parse with xml a text from mysql database当我用 xml 解析 mysql 数据库中的文本时保持文本格式
【发布时间】:2016-12-28 08:01:25
【问题描述】:

我有一个带有标记的 javascript 谷歌地图应用程序,当您单击它们时,存储在 mysql 数据库中的文本会显示在 DIV 标记中,如下视频所示:https://youtu.be/VtcxLoAG7Wk

问题是文本显示时没有分隔线。即使在视频中看到的数据库中,存储的文本仍然具有格式。

所以我的问题是如何在保持文本格式的情况下显示此文本,正如您在我从谷歌地图中使用的代码中看到的那样,它是通过解析 xml 完成的。

     <script type="text/javascript">
    //<![CDATA[

var name;
var html;
var type;
var lat;
var point;


    var customIcons = {
      restaurant: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png'
      },
      bar: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png'
      }
    };

    function load() {
      var map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(48.1351, 11.5820),
        zoom: 5,
        mapTypeId: 'roadmap'
      });
      var infoWindow = new google.maps.InfoWindow;

      // Change this depending on the name of your PHP file
      downloadUrl("phpsqlajax_genxml.php", function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
          var name = markers[i].getAttribute("name");
          var address = markers[i].getAttribute("address");
          var type = markers[i].getAttribute("type");
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getAttribute("lat")),
              parseFloat(markers[i].getAttribute("lng")));
          var html = "<b>" + name + "</b> </text> <br/>" + address;
          var icon = customIcons[type] || {};
          var marker = new google.maps.Marker({
            map: map,
            position: point,

          });
          bindInfoWindow(marker, map, infoWindow, html, name);
        }
      });
    }

    function bindInfoWindow(marker, map, infoWindow, html, name, downloadUrl) {
      google.maps.event.addListener(marker, 'click', function() {
        // infoWindow.setContent(html);
        // infoWindow.open(map, marker);

       var textillo = document.getElementById("mensaje").innerHTML = name;
      });
    }

然后在地图中显示标记的主函数调用另一个代码:

<?php
require("dbinfo.php");

function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&#39;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
return $xmlStr;
}

// Opens a connection to a MySQL server
$connection=mysql_connect ('localhost', $user, $pass);
if (!$connection) {
  die('Not connected : ' . mysql_error());
}

// Set the active MySQL database
$db_selected = mysql_select_db($db, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}

// Select all the rows in the markers table
$query = "SELECT * FROM markers WHERE 1";
$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

header("Content-type: text/xml");

// Start XML file, echo parent node
echo '<markers>';

// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  echo '<marker ';
  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'address="' . parseToXML($row['address']) . '" ';
  echo 'lat="' . $row['lat'] . '" ';
  echo 'lng="' . $row['lng'] . '" ';
  echo 'type="' . $row['type'] . '" ';
  echo '/>';
}

// End XML file
echo '</markers>';


?>

【问题讨论】:

  • 请停止使用mysql_*函数。它们在 PHP 5.5 中被弃用,它太旧了,甚至不再接收安全更新,并在 2015 年 12 月发布的 PHP 7 中完全删除。相反,使用 PDO(或mysqli_*,如果必须)。跨度>
  • 您能否提供示例输入、实际输出和预期输出?

标签: php mysql google-maps-api-3 xml-parsing text-formatting


【解决方案1】:

要“保留”换行符,您可以使用 nl2br PHP function 将数据库中的换行符转换为 HTML 中的 br 标记。

像这样:

<?php
$yourText = 'text gotten from
database';
echo nl2br($yourText);

【讨论】:

  • 我试过了,但它不起作用。如果我这样说: var textillo = document.getElementById("mensaje").innerHTML =nl2br(name);它不显示任何内容,如果我这样说: var name = nl2br(markers[i].getAttribute("name"));标记甚至没有在地图中设置。我不知道为什么会这样
  • 这看起来很像您尝试在 JavaScript 中使用 nl2br() php 函数。这是行不通的,因为它是一个 PHP 函数。我认为当您将 parseToXml 函数更改为这样返回时应该很好:return nl2br($xmlStr);
  • 我刚刚按照您所说的那样尝试了这段代码,但它不起作用,当我这样做时,标记不会填充地图。函数 parseToXML($htmlStr) { $xmlStr=str_replace('','>',$xmlStr); $xmlStr=str_replace('"','"',$xmlStr); $xmlStr=str_replace("'",''',$xmlStr); $xmlStr=str_replace("&",'& ',$xmlStr); return nl2br($xmlStr); } 是在这里你要添加 nl2br 吗?
  • 现在我放到了这个地方。 // 遍历行,为每个打印 XML 节点 while ($row = @mysql_fetch_assoc($result)){ // 添加到 XML DOCUMENT NODE echo 'fj dljg´klerj no it is like this: hello world.<br /> I would lke to display like this<br /> jewkjefj
    dljg´klerj 问题是它不明白它是 html,它只是显示数据库的内容,知道发生了什么吗?跨度>
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2021-09-17
相关资源
最近更新 更多