2017-07-31 77 views
0

我試圖從用戶通過網站(PHP)提交輸入,並將其鍵入的任何內容放入Python程序的字典中。我現在設置的方式是,例如,某人向網站上的「姓名」字段提交「John Smith」,點擊提交,並將他們的姓名保存在我的Python字典中,作爲'Name': 'John Smith'供我使用別處。這部分工作正常。在PHP中搜索並替換硬返回

當我遇到麻煩的是當用戶需要完整的段落提交到一些文本字段。我的Python程序將段落之間的任何硬返回/斷點解釋爲字典值的結尾,然後由於段落的下一段未在關鍵字:值對中格式化,整個程序崩潰。

我能夠通過搜索,並在PHP與"\\'"更換"'"來解決類似的問題,當用戶提交單引號(程序再次讀取此類似,當它是不是值的結束),它甚至觸動了我的Python腳本前以便它在放入字典時已經正確地轉義。

我不知道如何做出同樣的事情與硬回報。我嘗試過搜索"\r","\\r",並試圖找到CRLF以及其他所有我可以找到的有關在PHP中使用硬迴歸的潛在方式,並試圖用"\\n\\n"替代所有這些方法,但沒有一個方法可行。

我要指出的是,當我輸入完整的段落到詞典中用手,用線之間\n\n,程序工作得很好。

考慮到相當多,除了我上面使用包含段落之間的硬回車名稱字段例如每用戶提交,它打破了整個程序非常巨大的問題。任何想法,將不勝感激!

編輯補充:

按照要求,我編輯我的問題添加一些代碼示例。

的過程開始在用戶輸入一些文字到網站上的文本框中。例如:

Product Description: "This product blah blah blah blah. 

Blah blah blah blah for a few paragraphs with hard returns in between them." 

該文本框的內容保存到一個PHP變量,當用戶點擊該網站上提交,該變量的內容發送給我。所以對於上面的例子,我會得到一個格式正確的電子郵件,就像我在上面輸入的那樣,段落之間的硬回報。

對於用戶不會返回的文本框,例如'Name' : 'John Smith'(如上所示),將它作爲key:value對直接導入到我的Python字典中很容易。

我希望發生的是有我的字典裏是這樣的:

dict = { 
'Name': 'John Smith', 
'Product Description': 'This product blah blah blah blah.\n\nBlah blah blah blah for a few paragraphs with hard returns in between them.' 
} 

什麼實際發生的是這樣的:

dict = { 
     'Name': 'John Smith', 
     'Product Description': 'This product blah blah blah blah.' 
     'Blah blah blah blah for a few paragraphs with hard returns in between them.' 
} 

這明顯錯誤,因爲「等等等等等等等等幾在他們之間有回報的段落。「不是一個關鍵:價值對。

此前,當用戶在文本字段中輸入撇號時,我遇到了同樣的問題。例如:

Product Name: "John's Book of Recipes" 

隨後將顯示爲

'Product Name': 'John' 
's Book of Recipes' 

哪出錯出於同樣的原因 - 「的食譜書」是不是一個鍵:值對。

我能放上這行的網站上的PHP很容易地解決這個問題:

$Product_Name = str_replace("'", "\\'", "$Product_Name"); 

它與正確轉義"\\'「之前,它曾經被髮送給我或發送到替代"'"我。Python字典

這真是棒極了現在,我的字典裏顯示爲:

dict = { 
    'Name': 'John Smith' 
    'Product Name': 'John\'s Book of Recipes' 
} 

所以現在我的問題是,我有沒有一種方法來搜索和替換特定的字符/代碼時,用戶提交了段落之間的回報文本?

我想,類似上面:

$Product_Description = str_replace("\r", "\\n\\n", "$Product_Description"); 

和其他試圖將我的編輯前面所提到的,用的想法,我可以搜索任何的PHP保存那些難以回報爲(顯然不是「\ r「),並將它們替換爲我知道在我的Python代碼中工作的」\ n \ n「,因爲這是我迄今爲止的手工輸入方式。

希望這更清楚。如果沒有,請告訴我,我會再次編輯。

+0

採取某些類型的線路終端的請編輯您的問題,並添加一些示例代碼。 –

+0

我已經添加了一些代碼,如果你想看看!謝謝! – Oxymoronica

+0

如果我正確理解您的問題,您需要各種換行符/終止符。如果我錯了,請隨時糾正我。 –

回答

0

維基百科

https://en.wikipedia.org/wiki/Newline 
LF: Unix and Unix-like systems (Linux, macOS, FreeBSD, Multics, AIX, Xenix, etc.), BeOS, Amiga, RISC OS, and others[1] 

CR+LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC, and most other early non-Unix and non-IBM operating systems 

CR: Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Oberon, the classic Mac OS up to version 9, MIT Lisp Machine and OS-9 

RS: QNX pre-POSIX implementation 

0x9B: Atari 8-bit machines using ATASCII variant of ASCII (155 in decimal) 

LF+CR: Acorn BBC and RISC OS spooled text output. 
The Unicode standard defines a number of characters that conforming applications should recognize as line terminators:[5] 
LF: Line Feed, U+000A 
VT: Vertical Tab, U+000B 
FF: Form Feed, U+000C 
CR: Carriage Return, U+000D 
CR+LF: CR (U+000D) followed by LF (U+000A) 
NEL: Next Line, U+0085 
LS: Line Separator, U+2028 
PS: Paragraph Separator, U+2029