使用preg_split时,主题字符串中的$ 1

时间:2012-07-02 15:32:45

标签: php special-characters preg-split

我想将文本拆分为一个数组,其中分隔符是“\ n”中的一个或多个,然后将数组的内容作为元素放在unorder html-list中。当我在主题字符串中有$ 1时使用preg_split执行此操作时,我得到一个奇怪的结果。只是查看由分割产生的数组结果很好,$ 1似乎没有引起任何问题,但是当我循环遍历数组并使其成为一个html列表时,它会创建一个不同的结果然后预期(参见下面的示例)

如果这是主题字符串:

“第一行

第二行$ 1

第三行“

应该成为:

  • 第一行
  • 第二行$ 1
  • 第三行

但它变成了:

  • 第一行
  • 第二行第一行 第二行$ 1 第三行
  • 第三行

有谁知道为什么会这样? $ 1是某种具有保留意义的特殊html或php字符吗?

这是我写的代码:

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

1 个答案:

答案 0 :(得分: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中有一个美元符号,需要转义。