Javascript-转义特定字符


Javascript - escaping specific characters

我正在使用php创建一些字符串,需要使用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才能控制它。但我不确定。

有人知道在这种情况下什么是最好的吗?

尝试使用更成熟的方式将变量封送至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')); ?>;

对我来说,最快的解决方案是设计一个完全唯一的分隔符,即使它是"|%^*"。

对我来说,最好的解决方案是开发一种上下文无关的语法。这就是明确定义所有类型的单词。

例如

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

做一个明确定义所有内容的干净设计将允许您覆盖边界情况。

一个例子是,在您的例子中,元素中有一个delimeter,但您需要找到区分它的方法。我的解决方案是,如果delimeter在一个元素中,那么它必须在整个列表周围有括号。否则,您将不知道元素的结束位置和列表的恢复位置。

如果我不清楚的话,你可以随时阅读关于语法的维基百科页面,或者在网上做研究。

我希望我是清白的。