Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Mysql > PHP > XML via echo

Pagina: 1
Acties:
  • 520 views sinds 30-01-2008
  • Reageer

  • Bld-
  • Registratie: Februari 2004
  • Laatst online: 18-11 09:50
Ik heb een flash app gemaakt die een xml bestand uitleest en weergeeft.
Het xml bestand ziet er zo standaard uit:
code:
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" standalone="yes"?>
<news>
    <items>
    <item>
        <header>Test</header>
        <content><![CDATA[Content [u]tekst[/u] [b]komt[/b] hier te staan]]></content>
        <author>Bld-</author>
    </item>
    </items>
</news>


Als ik nu de flash app draai, ziet alles er goed uit.. hij leest het xml bestand uit en geeft het weer.
Nu heb ik dit xml bestand gewoon in notepad gemaakt.
Alleen ik heb de data in een mysql database staan en wil het dus uitlezen en vervolgens met php het xml bestand maken.
Nu heb ik dit gedaan door gewoon alles te echo-en, maar dan kan ik geen html tags gebruiken, deze pakt hij niet... ook pakt hij dubbele enters als ik maar één ingeef.

Ik had gezocht en kwam erop dat het waarschijnlijk aan de CDATA ligt die ik juist niet via php krijg gemaakt.
Ook heb ik al gezocht naar oplossing hiervoor, maar toen kwam ik uit op DOM(?) en daar heb ik helemaal geen ervaring mee, vooral niet als ik nog wat extra's moet gaan installeren op mijn simpele windows xampp webserver ;p

Nu heb ik een bestaand script gevonden en hier vanalles aan bewerkt (na wat zoek acties op google/tweakers), maar het lukt nog niet.

Kan iemand mij hiermee helpen?

Alvast bedankt :)

php file
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<? 
header("Content-type: text/xml"); 
$dbserver = 'localhost';                             
$dbName = 'db';                         
$dbUser = 'xxx';                                
$dbPass = 'xxx'; 

mysql_connect($dbserver, $dbUser, $dbPass); 
mysql_select_db($dbName); 

//Select from table, desc limit amount of news you want to show in rss feed 
//edit query to fit your SQL table 
$query=("SELECT id, header, text, poster FROM info ORDER BY id"); 
$result=mysql_query($query); 
$text = $row['text'];

echo("<?xml version=\"1.0\" standalone=\"yes\"?>\n"); 
echo("<news>\n");
echo("<items>\n"); 
while($logs=mysql_fetch_array($result)) { 

echo("<item>\n"); 
//edit SQL fieldnames 
echo("<header>".$logs['header']."</header>"); 


    $rss = strip_tags($logs['text'],'<a><b><br><blockquote><center><code><dd><dl><dt><hr><i><img><li><ol><p><pre><u><ul>');

    echo "<content>\n\t\t<![CDATA[".$rss."]]>\n\t\t</content>";

echo("<author>".$logs['poster']."</author>"); 
echo("</item>\n"); 
} 
echo("</items>\n"); 
echo("</news>\n"); 
?>

  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 25-11 00:51
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php 
    header("Content-type: text/xml"); 
    $dbserver = 'localhost';                             
    $dbName = 'db';                         
    $dbUser = 'xxx';                                    
    $dbPass = 'xxx'; 

    mysql_connect($dbserver, $dbUser, $dbPass); 
    mysql_select_db($dbName); 

    //Select from table, desc limit amount of news you want to show in rss feed 
    //edit query to fit your SQL table 
    $query=("SELECT id, header, text, poster FROM info ORDER BY id"); 
    $result=mysql_query($query); 
?>
<?xml version="1.0" standalone="yes"?>
<news>
    <items>
<?php
    while($logs=mysql_fetch_array($result))
    { 
?>
        <item>
            <header><?php echo htmlspecialchars( $logs['header'] , ENT_QUOTES ); ?></header>
            <content><![CDATA[<?php echo $logs['text']; ?>]]></content>
            <author><?php echo $logs['poster']; ?></author> 
        </item>
<?php
    } 
?>
    </items>
</news>


Ik zou zoiets doen (of is dat te lomp?) Gewoon XML / PHP door elkaar, niet alles met echo. En verder geen strip tags doen op de rss (want staat al in CDATA in de XML).

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 11:31

DizzyWeb

Ondertiteld

En hoe gaat dat werken als er toevallig ]]> in de text staat?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DizzyWeb schreef op woensdag 01 augustus 2007 @ 15:20:
En hoe gaat dat werken als er toevallig ]]> in de text staat?
Notes on CDATA sections:

A CDATA section cannot contain the string "]]>", therefore, nested CDATA sections are not allowed.

Also make sure there are no spaces or line breaks inside the "]]>" string.
3 sec. zoeken.
Je kunt het dan natuurlijk escapen...
CDATA sections are useful for writing XML code as text data within an XML document. For example, if one wishes to typeset a book with XSL explaining the use of an XML application, the XML markup to appear in the book itself will be written in the source file in a CDATA section. However, a CDATA section cannot contain the string "]]>" and therefore it is not possible for a CDATA section to contain nested CDATA sections. The preferred approach to using CDATA sections for encoding text that contains the triad "]]>" is to use multiple CDATA sections by splitting each occurrence of the triad just before the ">". For example, to encode "]]>" one would write:
code:
1
 <![CDATA[]]]]><![CDATA[>]]>

This means that to encode "]]>" in the middle of a CDATA section, replace all occurrences with the following:
code:
1
 ]]]]><![CDATA[>

(This effectively stops and restarts the CDATA section).

[ Voor 55% gewijzigd door RobIII op 01-08-2007 15:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 25-11 00:51
idd, ]]> in 'text' vergeten, dom (haast haast haast). Als we toch bezig zijn: het 'poster' veld ook escapen!

  • Bld-
  • Registratie: Februari 2004
  • Laatst online: 18-11 09:50
Cascade schreef op woensdag 01 augustus 2007 @ 15:16:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php 
    header("Content-type: text/xml"); 
    $dbserver = 'localhost';                             
    $dbName = 'db';                         
    $dbUser = 'xxx';                                    
    $dbPass = 'xxx'; 

    mysql_connect($dbserver, $dbUser, $dbPass); 
    mysql_select_db($dbName); 

    //Select from table, desc limit amount of news you want to show in rss feed 
    //edit query to fit your SQL table 
    $query=("SELECT id, header, text, poster FROM info ORDER BY id"); 
    $result=mysql_query($query); 
?>
<?xml version="1.0" standalone="yes"?>
<news>
    <items>
<?php
    while($logs=mysql_fetch_array($result))
    { 
?>
        <item>
            <header><?php echo htmlspecialchars( $logs['header'] , ENT_QUOTES ); ?></header>
            <content><![CDATA[<?php echo $logs['text']; ?>]]></content>
            <author><?php echo $logs['poster']; ?></author> 
        </item>
<?php
    } 
?>
    </items>
</news>


Ik zou zoiets doen (of is dat te lomp?) Gewoon XML / PHP door elkaar, niet alles met echo. En verder geen strip tags doen op de rss (want staat al in CDATA in de XML).
Ik heb deze eens getest en ik krijg nog steeds enters en geen html tags in mijn flash app
De data in mysql ziet er alsvolgt uit:
code:
1
2
3
4
5
6
asdasdasasdasda
asdasdasdasdaasdasd

asdasd

<u>asdasdasd</u>]


In mijn flash app:
code:
1
2
3
4
5
6
7
8
9
10
asdasdasasdasda

asdasdasdasdaasdasd


asdasd



<u>asdasdasd</u>]


Als ik de bron bekijk van de xml.php dan zie ik wel gewoon CDATA ervoor staan met de bijbehorende ]-jes etc... :?
Hij pakt nu wel het onderstrepen, maar doet wel 1 enter teveel overal.

[ Voor 6% gewijzigd door Bld- op 01-08-2007 16:54 ]


  • Bld-
  • Registratie: Februari 2004
  • Laatst online: 18-11 09:50
hmmm, ik heb nu het volgende gevonden:
als ik mijn data opsla in mysql, zodat de <br /> blijft (dus met nl2br) dan slaat hij de data alsvolgt op in de DB:
code:
1
2
3
4
adasd<br />
dasdas<br />
<br />
asdadas


Nu rekent flash die echte enters, dus niet de <br />'s, ook mee als een enter, en dus komen er 2 enters...
Wat ik nu dus eigenlijk moet krijgen is:
code:
1
adasd<br />dasdas<br /><br />asdadas

Aan elkaar, in één regel dus :? hmmm

  • Cascade
  • Registratie: Augustus 2006
  • Laatst online: 25-11 00:51
Kan je eens met je favoriete teksteditor onderzoeken wat voor returns er precies in je database tekst staan? Is dat een CR + LF char, alleen een LF char (of zelfs alleen een CR char)?

Dat zal denk ik het verschil uitmaken voor Flash. Een oplossing is bijvoorbeeld om die chars te vervangen door '<br />' in je PHP.

  • Bld-
  • Registratie: Februari 2004
  • Laatst online: 18-11 09:50
hoe kan ik dat zien in notepad++ ? :P
[EDIT]
got it:
code:
1
2
3
4
asdasdasd<br />CR LF
asdasda<br />CR LF
<br />CR LF
asdasdasd

[ Voor 57% gewijzigd door Bld- op 01-08-2007 18:07 ]


Verwijderd

Bld- schreef op woensdag 01 augustus 2007 @ 17:01:
hmmm, ik heb nu het volgende gevonden:
als ik mijn data opsla in mysql, zodat de <br /> blijft (dus met nl2br) dan slaat hij de data alsvolgt op in de DB:
code:
1
...


Nu rekent flash die echte enters, dus niet de <br />'s, ook mee als een enter, en dus komen er 2 enters...
Wat ik nu dus eigenlijk moet krijgen is:
code:
1
...

Aan elkaar, in één regel dus :? hmmm
Sja, nl2br verwijdert de newlines niet, maar plaatst er alleen een <br /> voor. Dat staat prima gedocumenteerd. Lees even verder en je hebt meteen c/p code om die newline characters weg te krijgen. Zo moeilijk is het allemaal niet.

  • Bld-
  • Registratie: Februari 2004
  • Laatst online: 18-11 09:50
Verwijderd schreef op woensdag 01 augustus 2007 @ 18:07:
[...]

Sja, nl2br verwijdert de newlines niet, maar plaatst er alleen een <br /> voor. Dat staat prima gedocumenteerd. Lees even verder en je hebt meteen c/p code om die newline characters weg te krijgen. Zo moeilijk is het allemaal niet.
lol :)
Het werkt nu met:
code:
1
preg_replace("/\r\n|\n|\r/", "<br>", $text);

Moet alleen nog ff kijke, want hij pakt <b>en <i> code niet :P
Pagina: 1