2012-06-14 11 views
5

Co to jest najlepsza praktyka do generowania poprawnego kodu XML z PHP z przesłanych przez użytkownika tekstów, np. Dane sprzedaży e-commerce ze znakami handlowymi, nawiasami ostrymi, znakami bez znaków ascii, nowymi liniami itp.Wprowadzanie danych wprowadzanych przez użytkownika jako bezpiecznych dla XML

Na jakich funkcjach, bibliotekach, wyrażeniach regularnych polegają ludzie?

+0

Obecnie używam CDATA i htmlentities, a po akcentowany o w León spowodował trainwreck jestem usuwając znaki akcentowane z strtr(). Rzecz w tym, że ludzie z zaplecza firmy nienawidzą wyjścia htmlentities(), a ich koder Windows nie może ich zdekodować. – jerrygarciuh

+0

Brzmi bardziej, że miksujesz kodowanie znaków niż problem z samym CDATA. Używanie htmlentities i CDATA razem nie ma większego sensu BTW. Więc zamiast zwariować i powszechnie zgadywać, aby coś zabić, najpierw dowiedz się, gdzie leży problem. Rozwiązanie to jest często banalne. Co dokładnie nie działa? – hakre

+0

Mamy coś do roboty, którzy wykorzystali abstrakcyjne pamięci Expression Engine do stworzenia sklepu eCommerce. Kodowanie tabeli jest ustawione tak, aby pasowało do EE. Właścicielem zaplecza sklepu jest system Windows. Istnieje plik wykonywalny drugiej strony, który akceptuje pliki XML i importuje je do Great Plains w oknie Windows. Miałem za zadanie napisać API, które akceptuje połączenia z pliku wykonywalnego, aby zsynchronizować dystrybutorów, przechowywać produkty oraz zamówienia dystrybutorów i klientów detalicznych. Nie chciałem zawijać każdego elementu wejściowego użytkownika w tagach CDATA, ale nawet gdy to zrobiłem, znalazłem akcentowany problem z wydmuchiwaniem shtuffów. – jerrygarciuh

Odpowiedz

4

Wrap informacje w CDATA tagów i kodują dane z htmlentities()

'<tag><![CDATA[' . htmlentities($theData) . ']]></tag>' 

lub używając DOM

$dom = new DOMDocument("1.0", "utf-8"); 

/* ... */ 

$dom->createCDATASection(htmlentities($theData)); 
+0

Przykro mi, ale odpowiedź wygląda trochę tak, jakbyś nie miał pojęcia, z czego CDATA jest i co ma do zrobienia, czy nie. – hakre

1

Jeśli chcesz uzyskać bezpieczeństwo binarne, musisz użyć dodatkowego kodowania transportowego. Na przykład można użyć base64 lub uuencode do przechowywania danych w bezpieczny sposób binarny wewnątrz porcji XML.

Powiązane problemy