将源代码从HTML textarea保存到文件

时间:2012-11-23 22:15:12

标签: php html forms

我正在使用PHP从HTML表单的textarea中保存C ++代码。

问题是如果我的代码如下所示,

printf("%d\n");
printf("%d\n");

保存到文件中的代码如下:

printf(\"%d\\n\");\nprintf(\"%d\\n\");

我希望将原始代码保存在文件中。如果我使用,

$sourceCode = str_replace('\n',"\n", $sourceCode);
$sourceCode = str_replace('\"',"\"", $sourceCode);

结果如下(保存在文件中):

printf("%d\
");printf("%d\
");

很明显,替换源代码中的\n会替换所有创建的HTML \n以及用户提供的\n作为输入(原始文本)。唯一的区别是用户的输入在\之前还有\n,即\\n

如何解决问题,只会替换隐式转义字符,但用户自己编写的显式转义字符不会被更改?

1 个答案:

答案 0 :(得分:1)

如KenB所述,我们需要查看用于处理表单输入的PHP代码。

处理表格输入

在我看来,addslashes已在表单输入中使用。

  • 如果您在代码中执行此操作,则不要。这不是处理表单输入的正确方法。相反,您应该在使用之前使用正确的函数(例如htmlspecialcharsmysqli_real_escape_string)来转义输入。 Read about addslashes

  • 如果您使用的是默认启用magic_quotes_gpc的旧版PHP,那么您应该解决这个问题。 Read about 'Disabling Magic Quotes'

剥离斜杠

如果您无法控制添加斜杠的代码,则可以使用名为stripslashes的简单PHP函数删除它们。

$sourceCode = stripslashes($sourceCode);

Read about stripslashes

了解转义序列

您的str_replace代码显示对转义序列缺乏了解和/或对单引号和双引号缺乏了解。

在以下代码中,文字\n将替换为换行符。使用双引号,PHP将\n解释为转义序列而不是文字字符串。

$sourceCode = str_replace('\n',"\n", $sourceCode);

您想要的是用文字\\n替换文字\n。请注意,要指定文字反斜杠,必须加倍;因此,您将在下面看到三重反斜杠。

$sourceCode = str_replace('\\\n', '\n', $sourceCode);

虽然下一行完成了你想要的......

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

......它可能是用不同的方式写的。以下代码更易于阅读,节省您必须转义文字",并且不需要PHP来解释字符串。

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

我已经将上面的代码作为示例来解释PHP如何解释转义序列,但不要使用它们。要么避免在第一时间添加斜杠或者使用适当的功能剥离它们,如本答复的第一部分所述。

详细了解escape sequencesquoting strings

文字\n行之间

我不知道你在做什么来在行之间添加文字\n。我们需要查看您的代码。但要在事后删除它,您可以尝试以下

$sourceCode = str_replace(';\n', ";\n", $sourceCode);

当然,您可能需要更正其他C ++行尾序列。所以最好不要在第一时间添加它。