2017-01-28 22 views
0

私はthis SO question php: split string into 3 parts...と尋ねていました。しかし、私は問題に直面した。問題は処理するために二重引用符で囲まれた文字列です。そのため、$の符号が文字列内にある1つのケースでは、期待通りに動作しません。php:文字列は二重引用符で、一重引用符ではありません。直し方?

$str = $_POST['source'];//comes double-quoted, example: "$abc$"; 

その方法は、上記の質問からの回答からのコードは次のとおりです。

<?php 
$str = "$abc$$$";//comes from _POST['source']; 

preg_match('/^([^\w]*)(\w+.*\w+)?([^\w]*)$/iu', $str, $matches); 
$parts = array_slice($matches, 1); 

print_r($parts); 
?> 

は仕事と私は問題が"$abc$$$"で見つけたものからE_NOTICE : type 8 -- Undefined variable: が発生していないが、二重引用符で囲まれ、一重引用符ではない。それは$変数として処理する原因:SO: Dollar ($) sign in password string treated as variable

私は

$str = $_POST['source']; 
$str = (string)$str;// I hoped to convert "$abc$$$" to '$abc$$$' (to make single-quoted) 

を試みたが、それは解決しません。 この問題に対処する方法はありますか?

+0

downvoteの理由はありますか?ダウンホッター、理由を説明してもらえますか?ありがとう。 – Haradzieniec

+0

'$ str = _POST ['source'];'私はここで把握していません。なぜあなたはスーパーグローバルから '$'を意図的に削除していますか? –

+0

これはタイプミスです。更新しました。ありがとう。 – Haradzieniec

答えて

1

うまく動作します。 問題を引き起こしているあなたのテスト。

$_POST['source'] = '$abc$$$'; 

$str = $_POST['source']; 

preg_match('/^([^\w]*)(\w+.*\w+)?([^\w]*)$/iu', $str, $matches); 
$parts = array_slice($matches, 1); 

print_r($parts); 

結果

Array 
(
    [0] => $ 
    [1] => abc 
    [2] => $$$ 
) 

追加の例に代わり

これを行うこの簡単なテストを見てください。一重引用符で囲まれた文字列を使って変数をロードし、var_dumpはそれを二重引用符で囲んだ文字列として表示します。

$test = '$var'; 
var_dump($test); 

結果

string(4) "$var" 

、文字列は

その

を変更されていないダンプ機能は、PHP自体の中にあなたが $作成するときに使用する場合にのみ、文字列を表示することを決定しただけでどのようにそのこの変数の展開が行われる二重引用符で囲まれた文字列リテラルを使用します。これはPHPが行うもので、二重引用符で囲まれたリテラルについては何も本質的ではありません。

だから、この

$test = "$var"; 

$varが存在しない場合はエラーを発生させる、またはそれがない場合は、それを拡大していきます。しかし、それはPHPコードで行われているからです。

+0

これはhttp://stackoverflow.com/questions/2557834/dollar-sign-in-password-string-treated-as-variable http://stackoverflow.com/の質問に投稿した内容と重複しています。 a/2557845/1415724 –

+0

もちろん理論的には。あなたがここに投稿したものがそれを解決しなければ、他の何かがそれらを失敗させています。彼らが投稿しなかったのは期待された結果でした。 –

+0

@RiggsFolly、あなたは正しいだろうが、フロントエンドから二重引用符で囲まれている。そこにはjQueryの.text()メソッドを使ったテキストエリアがあります。私はバックエンドのシングルクォート文字列(javascriptで)に渡す方法を見つけられず、PHPでバックエンド側で二重引用符で囲まれた文字列を "変換"する方法を見つけませんでした。 – Haradzieniec

関連する問題