KenB が述べたように、フォーム入力を処理するために使用している PHP コードを確認する必要があります。
フォーム入力の処理
addslashes
フォーム入力で使用されているように見えます。
コードでそれを行っている場合は、しないでください。これは、フォーム入力を処理する適切な方法ではありません。代わりに、正しい関数 (htmlspecialchars
または などmysqli_real_escape_string
) を使用して、入力を使用する前にエスケープする必要があります。についてお読みくださいaddslashes
。
magic_quotes_gpc
デフォルトでオンになっている古いバージョンの PHP を使用している場合は、それを修正する必要があります。「マジック クォートの無効化」についてお読みください。
スラッシュを取り除く
スラッシュを追加しているコードを制御できない場合は、 という単純な PHP 関数を使用してスラッシュを削除できますstripslashes
。
$sourceCode = stripslashes($sourceCode);
についてお読みくださいstripslashes
。
エスケープ シーケンスについて
あなたのstr_replace
コードは、エスケープ シーケンスに関する理解の欠如、および/または単一引用符と二重引用符に関する理解の欠如を示しています。
次のコードでは、リテラル\n
が改行に置き換えられています。二重引用符を使用すると、PHP は\n
をリテラル文字列ではなくエスケープ シーケンスとして解釈します。
$sourceCode = str_replace('\n',"\n", $sourceCode);
あなたが望むのは、リテラル\\n
をリテラルに置き換えることです\n
。リテラルのバックスラッシュを指定するには、二重にする必要があることに注意してください。したがって、以下に示す 3 つのバックスラッシュです。
$sourceCode = str_replace('\\\n', '\n', $sourceCode);
そして、この次の行はあなたが望んでいたことを達成しますが...
$sourceCode = str_replace('\"',"\"", $sourceCode);
・・・書き方が違うかも。次のコードは読みやすく、リテラルをエスケープする"
必要がなく、文字列を解釈するために PHP を必要としません。
$sourceCode = str_replace('\"', '"', $sourceCode);
上記のコードは、PHP がエスケープ シーケンスを解釈する方法を説明するための例として示しましたが、使用しないでください。この回答の最初の部分で説明されているように、最初にスラッシュを追加しないか、適切な関数を使用してスラッシュを削除してください。
エスケープ シーケンスと文字列の引用について詳しくは、こちらをご覧ください。
\n
行間のリテラル
\n
行間にリテラルを追加するために何をしているのかわかりません。あなたのコードを見る必要があります。しかし、事後にそれを削除するには、次のことを試すことができます
$sourceCode = str_replace(';\n', ";\n", $sourceCode);
もちろん、他の C++ 行末シーケンスを修正する必要があるでしょう。なので最初から入れないほうがいいです。