Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: xmlwriter i encje
Forum PHP.pl > Forum > PHP
czachor
Witam,
mam pytanie do osób używających rozszerzenia XMLWriter. Mam problem, przy użyciu metody:
  1. <?php
  2. $xmlWriter->startElement('seg');
  3. $xmlWriter->text('jakiś ciąg z 'apostrofem'');
  4. $xmlWriter->endElement();
  5. ?>

wynik jest prosty:
Kod
<seg>jakiś ciąg z 'apostrofem'</seg>


Chcę do tego użyć htmlspecialchars:
  1. <?php
  2. $xmlWriter->startElement('seg');
  3. $xmlWriter->text(htmlspecialchars('jakiś ciąg z 'apostrofem'', ENT_QUOTES));
  4. $xmlWriter->endElement();
  5. ?>

wynik jest zaskakujący dla mnie:
Kod
<seg>jakiś ciąg z &amp;quot;apostrofem&amp;quot;</seg>


Nie mam pojęcia, dlaczego tak się dzieje... Co tu jest nie tak? Czy może ja czegoś nie rozumiem?
batman
Funkcja htmlspecialchars z flagą ENT_QUOTES zamienia Ci ' (apostrof) na & # 039 ; (oczywiście bez spacji). Do tego dochodzi zamiana & z nowego ciągu na $ apm ; i stad Twój problem.
Napisz co chcesz uzyskać, ponieważ może nie tędy droga winksmiley.jpg
Jeśli nie chcesz mieć problemów z niektórymi znakami (znaczniki HTML, cudzysłów, apostrof, itp), zamykaj tekst w sekcji CDATA.
czachor
Zgadza, się, nie na &quot; tylko na ' - mój błąd. Wszystko jest jasne, tylko nie mogę zrozumieć, dlaczego & jest zmieniane na &amp; - wygląda to jak podwójne użycie tej funkcji. Normalnie
  1. <?php
  2. htmlspecialchars(''', ENT_QUOTES);
  3. ?>
zwróci
Kod
'
natomiast używając tego w xmlWriter zamienia na ' po czym & zamienia jeszcze na &amp; (ostatecznie ciąg wygląda: &amp;#039;) co moim zdaniem nie powinno się dziać...
batman
Zamiast htmlspecialchars użyj CDATA (są do tego funkcje w XMLWriter) i będzie wszystko dział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.