- fix for \" and \\ sequences in quoted strings

release-0.6
alecpl 16 years ago
parent 30276ce7a4
commit 510ca2835b

@ -36,8 +36,10 @@ function iml_ClosingParenPos($str, $start){
$level=0; $level=0;
$len = strlen($str); $len = strlen($str);
$in_quote = 0; $in_quote = 0;
for ($i=$start; $i<$len; $i++) { for ($i=$start; $i<$len; $i++) {
if ($str[$i]=="\"") $in_quote = ($in_quote + 1) % 2; if ($str[$i] == '"' && $str[$i-1] != "\\")
$in_quote = ($in_quote + 1) % 2;
if (!$in_quote) { if (!$in_quote) {
if ($str[$i]=="(") $level++; if ($str[$i]=="(") $level++;
else if (($level > 0) && ($str[$i]==")")) $level--; else if (($level > 0) && ($str[$i]==")")) $level--;
@ -51,11 +53,12 @@ function iml_ParseBSString($str){
$id = 0; $id = 0;
$a = array(); $a = array();
$len = strlen($str); $len = strlen($str);
$in_quote = 0; $in_quote = 0;
for ($i=0; $i<$len; $i++) { for ($i=0; $i<$len; $i++) {
if ($str[$i] == "\"") $in_quote = ($in_quote + 1) % 2; if ($str[$i] == '"') {
else if (!$in_quote){ $in_quote = ($in_quote + 1) % 2;
} else if (!$in_quote) {
if ($str[$i] == " ") { //space means new element if ($str[$i] == " ") { //space means new element
$id++; $id++;
while ($str[$i+1] == " ") $i++; // skip additional spaces while ($str[$i+1] == " ") $i++; // skip additional spaces
@ -67,10 +70,15 @@ function iml_ParseBSString($str){
$part = substr($str, $i, $partLen); $part = substr($str, $i, $partLen);
$a[$id] = iml_ParseBSString($part); //send part string $a[$id] = iml_ParseBSString($part); //send part string
$i = $endPos; $i = $endPos;
}else $a[$id].=$str[$i]; //add to current element in array } else
$a[$id].=$str[$i]; //add to current element in array
} else if ($in_quote) { } else if ($in_quote) {
if ($str[$i]=="\\") $i++; //escape backslashes if ($str[$i]=="\\") {
else $a[$id].=$str[$i]; //add to current element in array $i++; //escape backslashes
if ($str[$i] == '"' || $str[$i] == "\\")
$a[$id] .= $str[$i];
} else
$a[$id] .= $str[$i]; //add to current element in array
} }
} }

Loading…
Cancel
Save