ホームページ  >  記事  >  バックエンド開発  >  PHP正規表現でrnと一致するにはどうすればよいですか?

PHP正規表現でrnと一致するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 13:11:201738ブラウズ

たとえば、このような小さな文字列 54bdf357c58b8a65c66d7c19c8e4d114rn8e99a69fbe029cd4e2b854e244eab143
(\r\n)+ を一致させるにはどうすればよいでしょうか?


ディスカッションへの返信 (解決策)

"/[rn]+/" は二重引用符で囲む必要があります。そうしないと、rn は ,r,,n として解釈されます

または'/[x0dx0a]+/'

確かに可能ですが、私が遭遇した問題は次のとおりです:

この文字列には rn などの改行が含まれています。とそのままブラウザに出力されるので、preg_replace を使ってこの 2 文字を df250b2156c434f3390392d09b1c9563 に置き換えたいのですが、この 2 文字は "/(\ r\n) のように抽出できません。 +/" または置換は、あなたが言ったように、一致できません。データベースに入力されるときに文字列がエスケープされています。モデレーターにこの理由を説明していただけますか。ありがとうございます

"/[rn]+/" は二重引用符で囲む必要があります。そうしないと、rn は 、r、、n として解釈されます

または '/[x0dx0a]+/'

別の文字を作成しました文字列テストを試してみましたが、確かに可能ですが、問題は次のとおりです。
データベースから文字列を取り出したのですが、この文字列にはrnのような改行文字が含まれており、そのままブラウザに出力されてしまいます。 preg_replace を使用して、これら 2 つの文字を df250b2156c434f3390392d09b1c9563 に置き換えたいのですが、どうやっても、これらの 2 つの文字を「/(\r\n)+/」のように、またはあなたが言ったように置き換えることはできません。一致できません。データベースに入力されるときに文字列がエスケープされています。モデレーターにその理由を説明していただけますか。ありがとうございます
echobase64_encode (データベースから直接抽出したコンテンツ);

結果を投稿します

リダイレクト df250b2156c434f3390392d09b1c9563
php はこれを行う nl2br 関数を提供します

echo base64_encode(you Contentデータベースから直接のみ);

結果を投稿する

Transfer df250b2156c434f3390392d09b1c9563
php はこれを行うために使用される nl2br 関数を提供します


nl2br は試行されましたが、エスケープされているため効果はありません\r\n
str_replace("\r\n","df250b2156c434f3390392d09b1c9563",$string); を使用したところ、正常に置き換えられ、要件を満たすことができました。
base64_encodeの出力結果:
W3NpemU9MjBdMjBweOeahOWtl+S9k1svc2l6ZV1cclxuW2Jd5paH5a2X5Yqg57KXWy9iXVxyXG5baV3lgL7mlpxbL2ldXHJcblt1XeS4i+WIkue6v1 1cclxuW3Nd5Lit5YiS57q/Wy9zXVxyXG5bY29sb3I9I2YwMF3nuqLoibJbL2NvbG9yXVxyXG5bdXJsXWh0dHA6Ly93d3cuMTYzLmNvbVsvdXJsXVxyXG5bZW1haWxdcmV kXzAyNkAxN jMuY29tWy9lbWFpbF1cclxuW2ltZ11xcGljLzMvMzAuZ2lmWy9pbWdd

$s = 'W3NpemU9MjBdMjBweOeahOWtl+S9k1svc2l6ZV1cclxuW2Jd5paH5a2X5Yqg57KXWy9iXVxyXG5baV3lgL7mlpxbL2ldXHJcblt1XeS4i+WIkue6v1svdV1cclxuW3Nd5Lit5YiS57q/Wy9zXVxyXG5bY29sb3I9I2YwMF3nuqLoibJbL2NvbG9yXVxyXG5bdXJsXWh0dHA6Ly93d3cuMTYzLmNvbVsvdXJsXVxyXG5bZW1haWxdcmVkXzAyNkAxNjMuY29tWy9lbWFpbF1cclxuW2ltZ11xcGljLzMvMzAuZ2lmWy9pbWdd';$s = base64_decode($s);echo nl2br(stripcslashes($s));
20px的字体<br /><strong>文字加粗</strong><br />倾斜<br />下划线<br />中划线<br />[color=#f00]红色[/color]<br />http://www.163.com<br />red_026@163.com<br />

$s = 'W3NpemU9MjBdMjBweOeahOWtl+S9k1svc2l6ZV1cclxuW2Jd5paH5a2X5Yqg57KXWy9iXVxyXG5baV3lgL7mlpxbL2ldXHJcblt1XeS4i+WIkue6v1svdV1cclxuW3Nd5Lit5YiS57q/Wy9zXVxyXG5bY29sb3I9I2YwMF3nuqLoibJbL2NvbG9yXVxyXG5bdXJsXWh0dHA6Ly93d3cuMTYzLmNvbVsvdXJsXVxyXG5bZW1haWxdcmVkXzAyNkAxNjMuY29tWy9lbWFpbF1cclxuW2ltZ11xcGljLzMvMzAuZ2lmWy9pbWdd';$s = base64_decode($s);echo nl2br(stripcslashes($s));
20px的字体<br /><strong>文字加粗</strong><br />倾斜<br />下划线<br />中划线<br />[color=#f00]红色[/color]<br />http://www.163.com<br />red_026@163.com<br />


ありがとうございました!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。