Avatar billede syswatch Novice
18. juli 2007 - 15:34 Der er 12 kommentarer og
1 løsning

str_replace function virker ikke

Hejsa..
Jeg kan ikke få denne funktion til at virke... hvad gør jeg galt.. ?

<?
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&apos;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
$xmlStr=str_replace("æ",'&aelig;',$xmlStr);
$xmlStr=str_replace("ø",'&oslash;',$xmlStr);
$xmlStr=str_replace("å",'&aring;',$xmlStr);
$xmlStr=str_replace("Æ",'&AElig;',$xmlStr);
$xmlStr=str_replace("Ø",'&Oslash;',$xmlStr);
$xmlStr=str_replace("Å",'&Aring;',$xmlStr);
return $xmlStr;
}
echo 'name="' . parseToXML($_GET[a]) . '" ';
?>
Avatar billede mccookie Seniormester
18. juli 2007 - 15:40 #1
Måske....

$xmlStr =str_replace('<','&lt;',$htmlStr);
$xmlStr .=str_replace('>','&gt;',$xmlStr);
$xmlStr .=str_replace('"','&quot;',$xmlStr);
$xmlStr .=str_replace("'",'&apos;',$xmlStr);
$xmlStr .=str_replace("&",'&amp;',$xmlStr);
$xmlStr .=str_replace("æ",'&aelig;',$xmlStr);
$xmlStr .=str_replace("ø",'&oslash;',$xmlStr);
$xmlStr .=str_replace("å",'&aring;',$xmlStr);
$xmlStr .=str_replace("Æ",'&AElig;',$xmlStr);
$xmlStr .=str_replace("Ø",'&Oslash;',$xmlStr);
$xmlStr .=str_replace("Å",'&Aring;',$xmlStr);
Avatar billede syswatch Novice
18. juli 2007 - 15:43 #2
Ser ikke ud til at virke...
Avatar billede nico26 Nybegynder
18. juli 2007 - 15:51 #3
kan du ikke bare bruge htmlentities? http://dk.php.net/htmlentities
Avatar billede olebole Juniormester
18. juli 2007 - 15:57 #4
<ole>

syswatch >> Fejlen ligger et andet sted. Dit eget eksempel fungerer fint.

Husker du at kikke i kildekoden, for at tjekke, hvad der er blevet skrevet ud? I browseren ser det jo nemlig fuldstændig ens ud, om der står '&lt;' eller '<'  ;o)

/mvh
</bole>
Avatar billede hmortensen Nybegynder
18. juli 2007 - 15:57 #5
Det ser ud til at du forsøger at sætte værdien til name attributten for et form element, skulle det mon ikke være value attributten, eller hvilket element er her tale om?
Avatar billede olebole Juniormester
18. juli 2007 - 16:03 #6
Når der er mange tegn, der skal skiftes, kan du i øvrigt bruge arrays (i hvertfald efter version 4.3.3):
    http://dk.php.net/manual/da/function.str-replace.php

- og så er der faktisk en funktion, specielt dedikeret til at oversætte strenge:
    http://dk.php.net/manual/da/function.strtr.php

- hvor 'strtr' står for 'string translate'. Den tager også imod et array  =)

$replArr = array(
    "<" => "&lt;",
    ">" => "&gt;",
    "\"" => "&lt;"
);
$str = strtr($str, $replArr);

- hvor strengen, der skal behandles hedder $str
Avatar billede syswatch Novice
18. juli 2007 - 18:54 #7
Hmmm... Jamen så fandt jeg da ud af at jeg ikke er helt dum... men så kræver det nok lidt mere kode for at i kan hjælpe med fejlen. Den må så ligge i at XML dokumenter ikke må indeholde ÆØÅ selv om de er formateret.

Her er hele min kode... kan i hjælpe med hvor fejlen så ligger ?

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

function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&apos;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
$xmlStr=str_replace("æ",'&aelig;',$xmlStr);
$xmlStr=str_replace("ø",'&oslash;',$xmlStr);
$xmlStr=str_replace("å",'&aring;',$xmlStr);
$xmlStr=str_replace("Æ",'&AElig;',$xmlStr);
$xmlStr=str_replace("Ø",'&Oslash;',$xmlStr);
$xmlStr=str_replace("Å",'&Aring;',$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 ';
echo 'name="' . parseToXML($row['markname']) . '" ';
  echo 'lat="' . $row['lat'] . '" ';
  echo 'lng="' . $row['lng'] . '" ';
  echo 'type="' . $row['type'] . '" ';
  echo 'markid="' . $row['id'] . '" ';
  echo '/>';
}

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

?>
Avatar billede syswatch Novice
18. juli 2007 - 21:20 #8
Har fundet svaret til min løsning her: http://www.eksperten.dk/spm/428442
I XML hedder tegne noget andet...
Avatar billede tinem Novice
24. juli 2007 - 17:39 #9
syswatch vil du have noget imod at skrive løsningen her. Jeg har knoklet med samme problem i dagevis nu. Jeg kan se af koderne, at det er den samme tutorial som vi har brugt koderne fra http://code.google.com/support/bin/answer.py?answer=65622&topic=11369.

Du kan se min diskussion i forummet her http://groups.google.dk/group/Google-Maps-API/browse_thread/thread/c18b4562b876eeb2/?hl=da#

Jeg vil have mulighed for at skrive < og > samt æ ø å i mysql databasen, og det er dette som jeg tror at du har fundet løsningen på, ikke?


/Tine
Avatar billede syswatch Novice
24. juli 2007 - 20:23 #10
Hej Tine...
Du skal udskifte din funktion i phpsqlajax_genxml2.php med denne:

function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&apos;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
$xmlStr=str_replace("æ",'&#xE6;',$xmlStr);
$xmlStr=str_replace("ø",'&#xF8;',$xmlStr);
$xmlStr=str_replace("å",'&#xE5;',$xmlStr);
$xmlStr=str_replace("Æ",'&#xC6;',$xmlStr);
$xmlStr=str_replace("Ø",'&#xD8;',$xmlStr);
$xmlStr=str_replace("Å",'&#xC5;',$xmlStr);
return $xmlStr;
}

Så virker den med æ ø å, er faktisk ikke sikker på < > virker... Men det er noget med at det er et forkert tegnsæt.
Avatar billede tinem Novice
24. juli 2007 - 21:44 #11
Tusind tak. Nu virker æ ø å, men jeg kan IKKE få <br> i databasen til at virke og har prøvet alt muligt. Har du et forslag?
Avatar billede tinem Novice
24. juli 2007 - 22:18 #12
Som jeg også skrev i det andet forum, har jeg fundet frem til en løsning som også virker med <br> samt æ ø å og det er at undlade koderne ovenfor og skrive sådan her:

$encoded=$row['name'];
$encoded=htmlspecialchars($encoded);
$encoded=utf8_encode($encoded);
echo 'name="' .$encoded. '" ';

$encoded=$row['address'];
$encoded=htmlspecialchars($encoded);
$encoded=utf8_encode($encoded);
echo 'address="' .$encoded. '" ';

Du kan se at det virker her http://www.tinemuller.dk/googlemap/tutorial/without_dom/tutorial_I.htm, men så kommer vi til problemet med at finde ud af hvilke koder man skal skrive for at det skal vise images, hvis man skriver sådan her i databasen:

<img src="kirsten.jpg" height="165" width="122">
Avatar billede syswatch Novice
25. juli 2007 - 07:40 #13
Hej Tine,

Så prøv lige at rette functionen til denne:

function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','&#x3c;',$htmlStr);
$xmlStr=str_replace('>','&#x3e;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&apos;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
$xmlStr=str_replace("æ",'&#xE6;',$xmlStr);
$xmlStr=str_replace("ø",'&#xF8;',$xmlStr);
$xmlStr=str_replace("å",'&#xE5;',$xmlStr);
$xmlStr=str_replace("Æ",'&#xC6;',$xmlStr);
$xmlStr=str_replace("Ø",'&#xD8;',$xmlStr);
$xmlStr=str_replace("Å",'&#xC5;',$xmlStr);
return $xmlStr;
}

Ved ikke om det vil virke, men det er værd at prøve.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester