1

\n に対して str_replace を実行すると、スクリプト内のすべての文字 "n" が置き換えられ続けます。私がやろうとしていることは、この「see\nyou\noon\n」を「see you soon」に置き換えます。文中のすべての n を削除していることを除いて。私はこの「また会いましょう」を受け取り続けます。

具体的には「n」ではなく「\n」をターゲットにすることはできますか?

簡単な質問です。おそらくニムロディック。お時間と解決策をありがとう。

編集>コードの追加>これは修正しようとしているコードです

    $text = "Description: Join us today, Sunday644 \u2022 Pastor Ed Weiss \u2022 Faith World\nOutreach Church \u2022 Bartlett, IL \u2022 Starting at 11:30am,\nfwo.org\/webcast<http:\/\/www.google.com\/url?q=http:\/\/fwo.org\/webcast&ust=1340553597624000&usg=AFQjCNE5g0jUGFl1nDLmKOHuIG8M8y3Wcg>\n";
    preg_match("/Description: ([^\\r\\n]+)/s", $text, $b);
    $text = preg_replace("/\u2022/", "•", $text);
    $text = preg_replace("/[\n\r]/"," ",$text);

    echo $text;

私のテストでは、「r」と「n」の文字が失われています。

4

2 に答える 2

7

改行と annはまったく別の文字です。

改行はほとんどの場合\n、プログラミング言語のように表されますが、実際には文字コード 10 (10 進数) です。一方、n は文字コード 110 (10 進数) です。エスケープシーケンス以外には、それらの間にはまったく関係がありません。

交換\nしてのみ\n使用するには:

$str = str_replace("\n", " ", $string);

編集 1 : 例については、コナーがコメントに投稿したスニペットを参照してください。

編集 2 :JoeCortopassi が指摘したように、PHP は\n特定の種類の文字列リテラル内でのみ解析します。たとえば'\n'、リテラル\n文字列になります。(文字\の後に文字n)。

"\n" //new line (char code 10)
'\n' //literal \ followed by n (char code 92 followed by char code 110)
"\\n" //literal \ followed by n (same as '\n')
'\\n' //literal \ followed by n (same as '\n' :p)

または:

"\n" === chr(10)
'\n' === "\\n" === '\\n' === chr(92) . chr(110)
于 2012-07-02T22:45:01.590 に答える
3

オプション1

次のように表示されている文字列がある場合:

see\nyou\nsoon\n

...次に、これを使用したいと思うでしょう:

$str = str_replace('\n', ' ', $string);

...PHP はバックスラッシュ文字の後に「n」を表す文字を表示するためです。単一引用符を使用します。これは、php がそれをエスケープ文字のないリテラル文字列として解釈するためです。

`

オプション #2

一方、次のように表示されている文字列がある場合:

see
you
soon

...次に、これを使用したいと思うでしょう:

$str = str_replace("\n", '', $string);

... php はこの文字列を解釈する必要があるものと見なすためです。これは、変数が処理され、 のようなエスケープ文字が処理\nされ、リテラル文字値に解釈されることを意味します\t\\

あなたが話していることから、あなたの文字列は改行ステートメントであるべきもので書かれているように聞こえますが、それは決して解釈されなかったので、オプション#1はおそらくあなたが最善の策です

于 2012-07-02T23:00:26.023 に答える