2

我想将文本拆分为一个数组,其中分隔符是一个或多个“\n”,然后将数组的内容作为元素放入无序的 html 列表中。当我在主题字符串中有 $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>';
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';将回显 this: 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 回答