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)*

在明确定义所有内容的情况下进行干净的设计将允许您涵盖边界情况。

一个例子是在您的示例中,您在元素中有一个分隔符,但您需要找到一种方法来区分它。我的解决方案是,如果分隔符在一个元素中,它必须在整个列表周围有括号。否则,您不知道元素在哪里结束并且列表继续。

如果我不清楚,您可以随时阅读有关语法的维基百科页面,或在线进行研究。

我希望我很清楚。

于 2012-09-02T05:29:58.383 回答