在PHP中搜索并替换硬返回
我试图从用户通过网站(PHP)提交输入,并将其键入的任何内容放入Python程序的字典中。我现在设置的方式是,例如,某人向网站上的“姓名”字段提交“John Smith”,点击提交,并将他们的姓名保存在我的Python字典中,作为'Name': 'John Smith'
供我使用别处。这部分工作正常。在PHP中搜索并替换硬返回
当我遇到麻烦的是当用户需要完整的段落提交到一些文本字段。我的Python程序将段落之间的任何硬返回/断点解释为字典值的结尾,然后由于段落的下一段未在关键字:值对中格式化,整个程序崩溃。
我能够通过搜索,并在PHP与"\\'"
更换"'"
来解决类似的问题,当用户提交单引号(程序再次读取此类似,当它是不是值的结束),它甚至触动了我的Python脚本前以便它在放入字典时已经正确地转义。
我不知道如何做出同样的事情与硬回报。我尝试过搜索"\r"
,"\\r"
,并试图找到CR
和LF
以及其他所有我可以找到的有关在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“,因为这是我迄今为止的手工输入方式。
希望这更清楚。如果没有,请告诉我,我会再次编辑。
维基百科
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
采取某些类型的线路终端的请编辑您的问题,并添加一些示例代码。 –
我已经添加了一些代码,如果你想看看!谢谢! – Oxymoronica
如果我正确理解您的问题,您需要各种换行符/终止符。如果我错了,请随时纠正我。 –