Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DOM - (nie)formatowanie + (nie)enkodowanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
yoyo
Witam wszystkich po długiej nieobecności na forum.

Mam dwa problemy:

1. Pierwszy problem - formatowanie xml'a ($formatOutput)

ok, więc zacznę od dobrej wiadomośći:

  1. <?php
  2. $xml = DOMDocument::loadXML('<html><head><title>tytuł</title></head><body><p>treść</p></body></html>');
  3. $xml->formatOutput = true;
  4. $xml->encoding  = 'utf-8';
  5. echo $xml->saveXML();
  6. ?>


Dostaję wynik taki jaki oczekiwałem:
(widzę, że forum nie pokazuje wcięć, w każdym razie wcięcia są takie jakie być powinny)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <html>
  3.  <head>
  4.    <title>tytuł</title>
  5.  </head>
  6.  <body>
  7.    <p>treść</p>
  8.  </body>
  9. </html>


Natomiast problem pojawia się, gdy pomiędzy jakikolwiek element wstawię choćby jeden znak, poniżej dodałem spację po <head>:

  1. <?php
  2. $xml = DOMDocument::loadXML('<html><head> <title>tytuł</title></head><body><p>treść</p></body></html>');
  3. $xml->formatOutput = true;
  4. $xml->encoding  = 'utf-8';
  5. echo $xml->saveXML();
  6. ?>


Wynik dostaję taki:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <html> <head><title>tytuł</title></head><body><p>treść</p></body></html>


I to jest pierwszy problem - teraz przestał formatować.


2. Drugi problem - krzaki przy uzyciu saveHTML()

  1. <?php
  2. $xml = DOMDocument::loadXML('<html><head><title>tytuł</title></head><body><p>treść</p></body></html>');
  3. $xml->formatOutput = true;
  4. $xml->encoding = 'utf-8';
  5. echo $xml->saveHTML();
  6. ?>


A wynik:
(no kurka nie da się tego pokazać, bo forum automatycznie konwertuje &#xxx; na znaczki, tak więc wlepiłem "&-" zamiast "&")

  1. <html>
  2. <head><title>tytu&-#322;</title></head>
  3. <body><p>tre&-#347;&-#263;</p></body>
  4. </html>


Wszystkie dwubitowce zostają zakodowane... abstrahuje już że nie takiego formatowania się spodziewałem.
  • php 5.0.4
  • libxml 2.6.11
  • Windows XP
  • Ilość godzin przed komputerem dzisiaj: 11
NuLL
Do pierwszego...

  1. <?php
  2.  
  3. $xml = new DOMDocument('1.0', 'utf-8');
  4. $xml->preserveWhiteSpace=false;
  5. $xml->loadXML('<html><head> <title>tytuł</title></head><body><p>treść</p></body></html>');
  6. $xml->formatOutput = true;
  7. $xml->encoding  = 'utf-8';
  8. echo $xml->saveXML();
  9.  
  10. ?>


Co do drugiego - zrób coś takiego
  1. <?php
  2. $xml = new DOMDocument('1.0', 'utf-8');
  3. $xml->loadXML('cos tam');
  4. //bla bla
  5.  
  6. ?>
yoyo
Cytat
Do pierwszego...


dzięki śliczne smile.gif

Cytat
Co do drugiego - zrób coś takiego


Problem dotyczy saveHTML() a nie saveXML() i niestety wywołanie DOMDocument('1.0', 'utf-8') nic u mnie nie zmienia, nadal wypluwa jak wypluwał...
NuLL
Ostatecznie mozna to przepuścić przez str_replace'a.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.