2016-10-25 3 views
0

Google지도 마커에 문제가 있습니다. 마커 이름에 폴란드 문자를 사용하고 싶습니다. 나는 내 데이터베이스에있다. 이것은 적절한 (afaik) XML을 만드는 데 사용하는 파일입니다.xml 마커의 인코딩이 잘못되었습니다

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', $username, $password); 
if (!$connection) { 
    die('Not connected : ' . mysql_error()); 
} 

// Set the active MySQL database 
$db_selected = mysql_select_db($database, $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 '; 
    $test = $row['name']; 
    //$test2 = string utf8_encode (string $test); 
    echo 'name="' . $test . '" '; 
    echo 'address="' . parseToXML($row['address']) . '" '; 
    echo 'lat="' . $row['lat'] . '" '; 
    echo 'lng="' . $row['lng'] . '" '; 
    echo 'city="' . $row['city'] . '" '; 
    echo '/>'; 
} 

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

나는이 파일 (브라우저 화면이 제대로 폴란드어 문자)를 사용하여 내 DB에서 적절한 출력을 얻을하지만 난 사용하여지도 만들 때 : 다음

<!DOCTYPE html > 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>PHP/MySQL & Google Maps Example</title> 
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBdj-LlQrTCj6bQcAq4fxONy9MaZcXvfc8" 
      type="text/javascript"></script> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
    <script type="text/javascript"> 
    //<![CDATA[ 

    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(50.046465, 19.913828), 
     zoom: 13, 
     mapTypeId: 'roadmap' 
     }); 
     var infoWindow = new google.maps.InfoWindow; 

     // Change this depending on the name of your PHP file 
     downloadUrl("markergen.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("city"); 
      var point = new google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon 
      }); 
      bindInfoWindow(marker, map, infoWindow, html); 
     } 
     }); 
    } 

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

    function downloadUrl(url, callback) { 
     var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

     request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request, request.status); 
     } 
     }; 

     request.open('GET', url, true); 
     request.send(null); 
    } 

    function doNothing() {} 

    //]]> 

    </script> 

    </head> 

    <body onload="load()"> 
    <div id="map"></div> 
    </body> 

</html> 

을 나는 전체 데이터를 얻을 수 있지만, 제대로 폴란드어를 표시하지 않고 문자. 나는 내가 아마

string utf8_encode (string $data) 

를 사용해야하지만 난 데이터를 변환하고 실패 할 첫 번째 파일에 넣어하려고 않았다는 것을 알고있다. 내 질문에 내 코드에 정확하게 입력해야하는 위치는 무엇입니까? 아니면 다른/더 나은 옵션이 있습니다.

편집 : 지금 DOM이 같은 개체를 사용하려고 해요 :

<?php 
require("../test1/phpsqlinfo_dbinfo.php"); 


// Start XML file, create parent node 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server 

$mysqli = new mysqli("localhost", $username, $password, $database); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

if (!$mysqli->set_charset("utf8")) { 
    printf("Error loading character set utf8: %s\n", $mysqli->error); 
    exit(); 
} else { 
    printf("Current character set: %s\n", $mysqli->character_set_name()); 
} 


// Select all the rows in the markers table 

$query = "SELECT * FROM markers WHERE 1"; 
$result = $mysqli->query($query); 


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

// Iterate through the rows, adding XML nodes for each 

while ($row = @mysqli_fetch_assoc($result)){ 
    // ADD TO XML DOCUMENT NODE 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 
    $newnode->setAttribute("name",$row['name']); 
    $newnode->setAttribute("address", $row['address']); 
    $newnode->setAttribute("lat", $row['lat']); 
    $newnode->setAttribute("lng", $row['lng']); 
    $newnode->setAttribute("city", $row['city']); 
} 

echo $dom->saveXML(); 

?> 

을하지만 지금 같은 결과에 마커의 내부 마커를 가지고 : 데이터 년 OFC와 <marker><marker>...</marker></marker>. 그것을 고치는 방법? 여전히 데이터가 올바르게 인코딩되었는지는 모르지만 반드시 있어야합니다.

+0

당신은 MySQL에게 어떤 인코딩을 사용할지 말하지 않습니다. 데이터가 이미 UTF-8입니까? 또는 테이블을 만들 때 적용된 데이터베이스 기본 인코딩을 사용하고 있습니까? –

답변

1

아니요, 아니요, utf8_encode()를 사용하면 안됩니다.

그러나 ext/mysqli 또는 ext/pdo를 사용해야합니다 (기존의 depreacted 및 removed ext/mysql은 제외). 연결 인코딩을 UTF-8로 설정하여 모든 문자열을 데이터베이스에서 UTF-8로 가져옵니다.

그런 다음 XML 라이브러리 (DOM 또는 XMLWriter)를 사용하여 XML 출력을 생성하십시오. 라이브러리는 필요에 따라 특수 문자를 인코딩/이스케이프합니다.

누락 된 XML 선언도 제공합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이런 것을 시도했다 : –

관련 문제