2

一重引用符と二重引用符の両方をバックスラッシュでエスケープする単純な PHP スクリプトがあります。これが私のコードです:

$output = str_replace('"','\"',$input);
$output = str_replace("'","\'",$output);
return $output;

問題は、二重引用符のみをエスケープするため、次のような文字列

"This" is a 'string'

であると解析します

\"This\" is a 'string'

いいえ

\"This\" is a \'string\'

2行目を次のように変更すると

$output = str_replace("'","asdf",$output);

私は得る

\"This\" is a asdfstringasdf

何がうまくいかないのですか?

ありがとう

4

3 に答える 3

3

あなたのコードに問題はありませんでした。私のテストは以下のとおりです。

<?php

    $input = '"This" is a '."'".'String'."'";
    echo $input.'<br />';
    //Echos  "This" is a 'String'

    $output = str_replace('"','\"',$input);
    $output = str_replace("'","\'",$output);
    echo $output;
    //Echos  \"This\" is a \'String\'

編集済み

今は関係ありませんが、OPはそれを理解しました:D

于 2013-08-22T17:34:51.210 に答える
1

これを試して:

$output = str_replace("\"","\\\"",$input);
$output = str_replace("\'","\\\'",$output);
return $output;

問題は、文字列内の ' はエスケープ文字であるため、 \' として注意する必要があることです。バックスラッシュ \ は、文字列内でも二重の \ です。

これがうまくいくかどうか教えてください。

于 2013-08-22T17:29:20.097 に答える