0

私はphpを使用して、javascriptでsplit()する必要のある文字列を作成しています。

例:

<?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に分割に使用する文字があり、それが非区切り文字部分の一部でもある場合です。

例えば:

<?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がそれを取得する前に、指定された区切り文字を別の形式に変換する必要があると感じています。しかし、私にはわかりません。

誰もがこの状況で何が最善か知っていますか?

4

2 に答える 2

2

変数をjavascriptにマーシャリングするより成熟した方法を使用してみてください。jsonのように。

php配列をjsonに変換するには:http://php.net/manual/en/function.json-encode.php

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

javascriptでjsonから配列を取得するには:

  • jQueryの場合:http://api.jquery.com/jQuery.parseJSON/
  • または、javascriptでeval()を使用するか(警告:安全ではありません-データソースを信頼する場合にのみ使用してください-文字列がユーザー提供の場合は使用しないでください)、または暗黙的にeval:var fruitArray = <?php echo json_encode(array('Apples', 'Oranges')); ?>;
于 2012-09-02T05:23:25.647 に答える
0

私にとって最も簡単な解決策は、「|%^*」であっても完全に一意の区切り文字を考案することです。

私にとって最良の解決策は、文脈自由文法を開発することです。つまり、すべての種類の単語を明示的に定義します。

例えば

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

すべてを明示的に定義するクリーンなデザインを行うことで、ボーダーケースをカバーできるようになります。

1つの例は、要素にデリメータがある例ですが、それを区別する方法を見つける必要があります。私の解決策は、デリメータが要素内にある場合、リスト全体を括弧で囲む必要があるということでした。そうしないと、要素がどこで終了してリストが再開するかがわかりません。

よくわからない場合は、いつでも文法に関するウィキペディアのページを読んだり、オンラインで調べたりすることができます。

はっきりしていたと思います。

于 2012-09-02T05:29:58.383 に答える