2

区切り文字が 1 つ以上の "\n" である配列にテキストを分割し、配列の内容を要素として unorder html-list に入れたいと考えています。件名の文字列に $1 があるときに preg_split を使用してこれを行うと、奇妙な結果が得られます。結果を分割した結果の配列を見るだけで問題はなく、$1 は問題を引き起こさなかったようですが、配列をループして html リストにすると、予想とは異なる結果が作成されます (以下の例を参照)。

これが件名の文字列である場合のように:

「一行目

2 行目 $1

三行目」

次のようになります。

  • 最初の行
  • 2 行目 $1
  • 三行目

しかし、次のようになります。

  • 最初の行
  • 2 行目 1 行目 2 行目 $1 3 行目
  • 三行目

なぜこれが起こるのか誰か知っていますか?$1 は予約された意味を持つある種の特別な html または php 文字ですか?

これは私が書いたコードです:

        $listElements = preg_split('/[\n]+/',$subject);
        $output = '<ul>';
        foreach ( $listElements as $val ) {
          $output .= '<li>' . $val . '</li>';
        }
        $output .= '</ul>';
4

1 に答える 1

2

PHP 文字列内でドル記号を使用すると、それに慣れていない人には奇妙な効果があります。

$foo = "BAR";
$example = "Hello, World! $foo $foo black sheep";
echo $example;

上記の例はエコーします: Hello, World! BAR BAR black sheep. これは、変数が文字列内で展開されるためです。

この動作を停止する簡単な方法は、一重引用符を使用することです。上記の例を に変更すると、'Hello, World! $foo $foo black sheep';これがエコーされます: Hello, World! $foo $foo black sheep、ドルはそのまま残ります。

二重引用符で囲まれた文字列内での変数の展開を停止する別の方法は、それらをバックスラッシュでエスケープすることです。

$example = "Hello, World! \$foo \$foo black sheep";

エコーします:

Hello, World! $foo $foo black sheep


あなたの例で$valは、エスケープが必要なドル記号が含まれていると思います。

于 2012-07-02T15:36:34.907 に答える