2009-03-20 18 views
9

Gizli bir alan üzerinden çok satırlı veri göndermeliyim. Veriler postadan sonra bir metin içinde görüntülenecektir. Html formunda bir satırsonu/satırbaşı iadesi nasıl gönderebilirim?Satır içi/satırbaşı, gizli alan değeri olarak gönderilsin

denedim \ bu sadece gerçek nakleder n ancak r \ "\ r \ n" veri

<input type="hidden" name="multiline_data" value="line one\r\nline two" /> 

bunu yapmanın bir yolu var mı?

cevap

5

Karakter kümesine bağlı olarak gerçekten ama & # 10; satır besleme ve & # 13; taşıma dönüşü olmalı. Bunları değer niteliğinde kullanabilmeniz gerekir.

+0

, büyük olasılıkla da gerçekleştirecek 'o ' ve ' ' yeni hatlar vardır ve hatalı yeni satırlar kaldırır eğer, o da ' tüm oluşumlarını kaldırır ve '. – 0b10011

2

Bunun ne için olduğunu ya da hangi teknolojiyi kullandığınızı söylemezsiniz, ancak gizli alana değer katamayacağınızın farkında olmanız gerekir = value line = "line one satır iki", Çünkü düşmanca bir kullanıcı POST'a geri gönderilmeden önce onunla kurcalayabilir. Değeri daha sonra <textarea> içine koyduğunuzdan, "multiline_data" alan içeriğini tekrar yazmadan önce doğruladığınız ve/veya dezenfekte etmediğiniz sürece, çapraz site komut dosyası saldırılarına kesinlikle tabi olacaksınız.

Gizli bir alana bir değer yazıp geri okurken, genellikle sunucuda, oturumun bir niteliği veya sayfa akışında ya da ortamınızın bu tür şeyler yapmasını sağladığından emin olmak daha iyidir.

11

yerine

<input type="hidden">

kullanmayı deneyin kullanmanın yeni hatları (Satır Başı & Satır Besleme) teknik olarak < giriş> 'ın gizli devlet izin veriliyor olsa

<textarea style="visibility:hidden;position:absolute;">

+0

'style =" display: none; "' muhtemelen daha fazla succint – megaflop

+0

@daiscog Form öğeleri "display: none" [her zaman sunulmuyor] olarak ayarlandı (http://stackoverflow.com/a/8318442/526741). Hangi tarayıcıların yaptığından ve görüntüleyemediğinden emin değilim: "alanları göster", ancak bu cevap altındaki yorumlara göre, IE8'de * yoktur *. – 0b10011

9

Daha eski tarayıcılarla uyumluluktan kaçınmaları gerekir. Tüm Taşıyıcı İadeleri (\u000D veya \r) ve tüm Satır Beslemeleri'ni (\u000A veya \n), uygulamanız tarafından bir Satırbaşı İade veya Yeni Satır olarak tanınan özel dizelerle değiştirerek yapabilirsiniz (ayrıca orijinalde varsa, bundan kaçınılabilirsiniz). dize).

Basitçe karakter kişiler nedeniyle uygun olmayan tarayıcılar muhtemelen &#10; ve &#13; yeni çizgilerdir bilerek ve değer çıkararak üzere, burada işe yaramaz. Eğer geçirilen değer bir textarea için echo olsaydı

Örnek Örneğin

, PHP'de, sen yeni satır (ve çıkmamış dize) içerecektir.

< textarea> \ ile Bazı metin
ve gönderilen değer olarak \ r \ n ile yeni bir satır </textarea dahil>

Ancak PHP'de, sen echo olsaydı < giriş> etiketinin değeri özniteliğine değer, tescilli dizelerinizle yeni satırlardan (örn. \r ve \n) kaçacak ve verilen değerdeki özel dizelerinizin örneklerinden kaçacaksınız.

< giriş tipi = "gizli" değeri = önce, sonra>

"bir \\ Bazı metin yeni bir satır \\ r \\ n gönderilen değer olarak \ r \ NAND dahil" Başka bir yerde (bir veritabanına ekleme, e-posta gönderme, vb.) değeri kullanarak, eğer gerekliyse, gönderilen değeri de unutmadan emin olun.

Reasürans

biraz daha emin olarak, WHATWG sorular ve Ian Hickson, şu anda HTML spec editörü cevap verdi:

bfrohs Soru yaklaşık < input type = gizli> - Satır Beslemeleri ve Taşıma İadeleri değerde mi? Metin durumunda ve Arama durumunda özellikle izin verilmez, ancak Gizli durum için söz edilmez. Ve değilse, form verisini bir textarea'dan saklamak için kabul edilebilir bir HTML çözümü var mı?

Hixie evet, onlar izin verilir // iirc // bazı tarayıcıların onları normalleştirmek olarak biz bu sabit ya da değil // spec içinde eğer // i unutmak olsa onları kaçmak isteyebilirsiniz eski nedenlerle

bir tarayıcı form gönderme destekliyorsa

Source

İlgili konular