Mam aplikację MVC3 ze stroną ze szczegółowymi informacjami. W ramach tego mam opis (pobrany z bazy danych), który zawiera spacje i nowe wiersze. Podczas renderowania nowe wiersze i spacje są ignorowane przez HTML. Chciałbym zakodować te spacje i nowe wiersze, aby nie były ignorowane.
Jak to robisz?
Próbowałem HTML.Encode, ale skończyło się na wyświetleniu kodowania (nawet nie na spacjach i nowych wierszach, ale na niektórych innych znakach specjalnych)
html
css
newline
whitespace
line-breaks
Dan kropka netto
źródło
źródło
Odpowiedzi:
Po prostu stylizuj zawartość za pomocą
white-space: pre-wrap;
.źródło
white-space: pre-line;
jeśli nie chcesz wcięcia pierwszego wiersza każdego akapitu.próbowałeś użyć
<pre>
tagu.http://jsfiddle.net/NweRa/
źródło
Możesz użyć białych znaków : przed wierszem, aby zachować przerwy w formatowaniu. Nie ma potrzeby ręcznego wstawiania elementów HTML.
lub dodaj do elementu HTML
style="white-space: pre-line;"
źródło
Co chcesz zamienić wszystkie spacje z
&nbsp;
(non-breaking space) i wszystkie nowe linie\n
z<<b></b>br>
(podział wiersza w HTML). To powinno osiągnąć wynik, którego szukasz.Coś z tej natury.
źródło
Próbowałem
white-space: pre-wrap;
techniki podanej przez Pete'a, ale jeśli sznurek był ciągły i długi, po prostu zabrakło mu pojemnika i nie wypaczał się z jakiegokolwiek powodu, nie miałam dużo czasu na zbadanie ... ale jeśli ty też masz ten sam problem, skończyło się na użyciu<pre>
tagów i następującego css i wszystko było dobrze iść.źródło
Jak wspomniałeś w odpowiedzi @Developer, prawdopodobnie kodowałbym HTML po wprowadzeniu przez użytkownika. Jeśli martwisz się o XSS, prawdopodobnie nigdy nie potrzebujesz danych użytkownika w jego oryginalnej formie, więc równie dobrze możesz uciec przed nim (i zastąpić spacje i znaki nowej linii, gdy jesteś przy nim).
Zauważ, że ucieczka przy wejściu oznacza, że powinieneś użyć @ Html.Raw lub utworzyć MvcHtmlString, aby wyrenderować to konkretne wejście.
Możesz także spróbować
ale myślę, że też nie ucieknie ze spacji. W takim przypadku proponuję zrobić .NET
na podstawie danych wprowadzonych przez użytkownika. A jeśli chcesz bardziej zagłębić się w użyteczność, być może możesz wykonać analizę XML danych wejściowych użytkownika (lub grać z wyrażeniami regularnymi), aby zezwolić tylko na wstępnie zdefiniowany zestaw tagów. Na przykład zezwól
... ale nie pozwalają
źródło
Zawiń opis w
textarea
elemencie.źródło
Jest na to prosty sposób. Wypróbowałem to na mojej aplikacji i działało całkiem dobrze.
Wystarczy wpisać: $ text = $ row ["text"]; echo nl2br ($ text);
źródło