2012-09-02 44 views
0

我正在使用php創建一些字符串,我需要使用javascript分割()。Javascript - 轉義特定字符

例如:

<?php 
$string = "Apples"; 
$string .= "|"; // delimiter 
$string .= "Oranges"; 
$string .= "|"; // delimiter 
$string .= "Grapes"; 
?> 

and here I split the string with JS: 
<script> 
var str = <?php echo $string; ?> 
var fruitsArray = str.split('|'); 
for(var i=0; i<fruitsArray.length; i++){ 
// do stuff here 
} 
</script> 

在這種情況下,管字符是分隔符。但我可以使用任何特殊字符。 我的問題是當$ string有一個字符我用於拆分AND它也是非定界符部分的一部分。

例如:

<?php 
$string = "Apples"; 
$string .= "|"; // delimiter 
$string .= "Oranges"; 
$string .= "|"; // delimiter 
$string .= "Grapes"; 
$string .= "|"; // delimiter 
$string .= "Berries: blue|black"; // pipe exists, but not meant to be a delimiter 
?> 

它僅是間接的,但它發生在我身上。我的分隔符有時會發現他們的成果。 (雖然我只用水果作爲例子)

我覺得我需要將我指定的分隔符轉換爲另一種格式,然後javascript才能保留它。但我不確定。

任何人都知道在這種情況下什麼是最好的?

+1

爲什麼不完全跳過打包/解包? '<?php $ strings = array('Apples','Oranges','Grapes','漿果:藍色|黑色'); ?> var fruitArray = <?php echo json_encode($ strings); ?>;' – DCoder

+1

如果您要將'$ string'直接回顯到您的JS中,您爲什麼不''回顯數組文字? – nnnnnn

回答

2

嘗試使用更成熟的編組變量到javascript中。像json一樣。

一個PHP數組轉換爲JSON:http://php.net/manual/en/function.json-encode.php

echo json_encode(array('Apples', 'Oranges')); 

要想從JSON在JavaScript的數組:)在javascript http://api.jquery.com/jQuery.parseJSON/

  • 或者只是使用eval(:

    • 使用jQuery (警告:不安全 - 僅在您信任數據源時使用 - 如果字符串是用戶提供的,請勿使用)或隱式評估:var fruitArray = <?php echo json_encode(array('Apples', 'Oranges')); ?>;
  • 0

    對我來說,最快的解決方案是設計一個完全獨特的分隔符,即使它是「|%^ *」。

    對我來說最好的解決方案是開發一個context free grammar。這明確定義了所有類型的單詞。

    例如

    delimeter :: | 
    list :: (element |)* 
    element :: [\w]+ (: list)* 
    

    做一個簡潔的設計中,可以定義明確的一切將讓你覆蓋邊界情況。

    一個例子是在你的例子中你有一個元素的分隔符,但你需要找到一種方法來區分它。我的解決方案是,如果分隔符在一個元素中,它必須在整個列表中有括號。否則,你不知道元素結束和列表恢復。

    如果我不清楚,你可以隨時閱讀關於語法的維基百科頁面,或在線研究。

    我希望我很清楚。