Mam dynamicznie wygenerowany dokument XML wykonany z PHP DOMDocument. Używam tego XML z plikiem XSL. Działało dobrze, dopóki nie otrzymałem symbolu waluty jena (¥) z wpisu do bazy danych. Ten symbol jest escapowany do encji ¥
HTML. Ta jednostka łamie silnik XSL/XML:
Ostrzeżenie: DOMDocument::load() [domdocument.load]: Jednostka 'yen' nie zdefiniowana w %file.xml%, wiersz: %1% w %file.php% w wierszu %2%
Gdy nie ma encji ¥
, wszystko działa dobrze.
Czy jest coś, czego nie zrobiłem/nie włączyłem/skonfigurowałem, aby uzyskać ten błąd?
3 odpowiedzi
XML rozpoznaje tylko kilka jednostek znakowych: <
, >
"
, &
, '
. Wszystko inne byłoby błędem parsowania, chyba że samodzielnie dodasz definicje encji: <!ENTITY yen "¥">
Dzięki ¥
Twój XML staje się niepoprawnie sformatowany, ponieważ XML nie ma predefiniowanej encji ¥
. Prawidłowa wersja ucieczki ¥
to ¥
.
Jeśli chodzi o pracę z XML, jedynymi encjami zdefiniowanymi domyślnie są &
, <
i >
. Wszelkie inne podmioty należy zdefiniować w DTD.
XSL nie definiuje żadnych innych jednostek w swoim doctype. Nawet jeśli konwertujesz na (x)HTML, nie masz zdefiniowanych innych jednostek, ponieważ Twój podstawowy typ dokumentu jest przeznaczony dla XSL.
można dodać wiele deklaracji, aby zdefiniować je w DTD, ale oznaczałoby to użycie niestandardowego DTD, co nie jest idealne, a jego utrzymanie wymaga dużo pracy.
Szczerze mówiąc, najłatwiejszym rozwiązaniem tego problemu jest po prostu użycie kodu jednostki numerycznej do wszystkiego. To uciążliwe, ale działa w każdym dialekcie XML bez konieczności hackowania za pomocą DTD.
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.