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

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

@ -32,13 +32,15 @@ $MIME_IMAGE = 5;
$MIME_VIDEO = 6; $MIME_VIDEO = 6;
$MIME_OTHER = 7; $MIME_OTHER = 7;
function iml_ClosingParenPos($str, $start){ 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++){
if ($str[$i]=="\"") $in_quote = ($in_quote + 1) % 2; for ($i=$start; $i<$len; $i++) {
if (!$in_quote){ if ($str[$i] == '"' && $str[$i-1] != "\\")
$in_quote = ($in_quote + 1) % 2;
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--;
else if (($level == 0) && ($str[$i]==")")) return $i; else if (($level == 0) && ($str[$i]==")")) return $i;
@ -51,15 +53,16 @@ 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++){
if ($str[$i] == "\"") $in_quote = ($in_quote + 1) % 2; for ($i=0; $i<$len; $i++) {
else if (!$in_quote){ if ($str[$i] == '"') {
if ($str[$i] == " "){ //space means new element $in_quote = ($in_quote + 1) % 2;
} else if (!$in_quote) {
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
} else if ($str[$i]=="("){ //new part } else if ($str[$i]=="(") { //new part
$i++; $i++;
$endPos = iml_ClosingParenPos($str, $i); $endPos = iml_ClosingParenPos($str, $i);
$partLen = $endPos - $i; $partLen = $endPos - $i;
@ -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
}else if ($in_quote){ $a[$id].=$str[$i]; //add to current element in array
if ($str[$i]=="\\") $i++; //escape backslashes } else if ($in_quote) {
else $a[$id].=$str[$i]; //add to current element in array if ($str[$i]=="\\") {
$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