2012-07-02 38 views
2

我想將文本拆分爲數組,其中分隔符是一個或多個「\ n」,然後將數組的內容作爲元素放入unorder html-list中。當我在主題字符串中存在$ 1時使用preg_split執行此操作時,我得到一個奇怪的結果。僅僅看看分割結果產生的數組是不錯的,$ 1似乎沒有引起任何問題,但是當我遍歷數組並將其放到一個html列表中時,它會創建一個不同的結果,然後就會出現這個結果(請參閱下面的示例)

一樣,如果這是主題字符串:

「第一線

二$ 1行

三線」

它應該成爲:

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

但它變成:

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

有誰知道爲什麼會發生這種情況? 是$ 1某種特殊的html或php字符,具有保留的含義嗎?

這是我寫的代碼:

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

回答

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裏面有一個美元符號,需要轉義。

+0

衝,很高興知道。但我仍然不確定這是否是我的問題,或者如何解決這個問題。我不會在任何地方使用雙引號,所以這不是問題。我如何「逃避」1美元? (另外我對$ 1變量有點好奇,我從來沒有在代碼中設置它,所以它來自哪裏?) – numfar

+0

啊!我解決了這個問題。 $ output稍後在preg_replace()中使用,並且我捕獲了存儲在$ 1中的某些內容。我可以重寫模式,以便任何內容都不存儲在$ 1中,但是如果我爲我的模式匹配,總是不會設置$ 0?所以我想這需要逃避。 – numfar

相關問題