2011-07-18 5 views
0

は、私は1つの\の文字が私の$a変数から消えている可能性がある方法奇妙preg_quote行動

<?php 
$a = "\\u0000"; 
$b = preg_quote($a); 
echo "<br />my own: ".$a; 
echo "<br />with preg_quote:". $b; 
?> 

result is here

このコードを持っていますか?

私はそれが非常に初期の動作/質問だと思うが、私は本当にこれらのエスケープ文字については失われている。

免責事項:すべての\ニーズをエスケープするよう\は、次のものをエスケープするので、私はPHP

+0

「echo」\\ "; ' – KingCrunch

+3

PHPの文字列の仕組みがわからないうちに、どのように"初心者ではない "ことができますか? \ *スクラッチヘッド\ * – Tomalak

+0

私はこれが表示されることを知っています\このケースで私は理由を知っています(単一のもので解析エラーが発生するため) – genesis

答えて

3

にbegginerありませんよ。それは次の文字の魔女をエスケープ\シングルと

は、Uですが、\は、文字列に意味を持っていないので、それは単純な文字

+0

しかし、質問は - なぜ、それは一枚でも動作しますか? – genesis

+1

は単一の '' \ 'で次の文字をエスケープしますが、' 'u''ですが' '\ u''は文字コードではないので、単純な文字のように表示されます –

+0

エスケープは必ずしもそうではありません。しばらく時間がかかります(EOLNではなく「\ n」から「\ n」まで) – RiaD

1

のように表示されるようにuが文字コードではありません\。

すなわち\n

は、新しい行の文字コードである

ので\\は、バックスラッシュのエスケープバージョンがあると\

1
$a="\\"; 

// $aに評価され、今\である第一\エスケープ別の理由\

すべてがOKです

1

$ aでは、ダブルバックスラッシュはエスケープされたバックスラッシュとして評価され、出力ではバックスラッシュが1つになります。

$ b preg_quoteは、両方のバックスラッシュを正規表現のメタ文字としてエスケープします。 4つのバックスラッシュが連続して表示され、出力に2つのバックスラッシュが表示されます。

1

\\は、\のエスケープバージョンです。したがって、元の文字列は、印刷されると、単一の\しか表示されません。しかし、preg_quoteは、\文字を別の文字で逃して\となり、結果として\\となります。