<?php
function JSEscape($s)
{
static $aSearch = array("\xe2\x80\xa9", "\\", "'", "\"", "\r\n", "\r", "\n", "\xe2\x80\xa8", "*/", "</");
static $aReplace = array(" ", "\\\\", "\\'", '\\"', "\n", "\n", "\\n", "\\n", "*\\/", "<\\/");
$val = str_replace($aSearch, $aReplace, $s);
return $val;
}
function PhpToJSObject($arData, $bWS = false, $bSkipTilda = false, $bExtType = false)
{
static $aSearch = array("\r", "\n");
$bExtType = !!$bExtType;
if(is_array($arData))
{
$i = -1;
$j = -1;
if (!empty($arData))
{
foreach($arData as $j => $temp)
{
$i++;
if ($j !== $i)
break;
}
}
if($j === $i)
{
foreach($arData as $key => $value)
{
if(is_string($value))
{
if(preg_match("#['\"\\n\\r<\\\\\x80]#", $value))
$arData[$key] = "'".JSEscape($value)."'";
else
$arData[$key] = "'".$value."'";
}
elseif(is_bool($value))
{
if($value === true)
$arData[$key] = 'true';
else
$arData[$key] = 'false';
}
elseif(is_array($value))
{
$arData[$key] = PhpToJSObject($value, $bWS, $bSkipTilda, $bExtType);
}
elseif ($bExtType && (is_int($value) || is_float($value)))
{
$arData[$key] = $value;
}
else
{
if(preg_match("#['\"\\n\\r<\\\\\x80]#", $value))
$arData[$key] = "'".JSEscape($value)."'";
else
$arData[$key] = "'".$value."'";
}
}
return '['.implode(',', $arData).']';
}
$sWS = ','.($bWS ? "\n" : '');
$res = ($bWS ? "\n" : '').'{';
$first = true;
foreach($arData as $key => $value)
{
if ($bSkipTilda && substr($key, 0, 1) == '~')
continue;
if($first)
$first = false;
else
$res .= $sWS;
if(preg_match("#['\"\\n\\r<\\\\\x80]#", $key))
$res .= "'".str_replace($aSearch, '', JSEscape($key))."':";
else
$res .= "'".$key."':";
if(is_string($value))
{
if(preg_match("#['\"\\n\\r<\\\\\x80]#", $value))
$res .= "'".JSEscape($value)."'";
else
$res .= "'".$value."'";
}
elseif(is_bool($value))
{
if($value === true)
$res .= 'true';
else
$res .= 'false';
}
elseif(is_array($value))
{
$res .= PhpToJSObject($value, $bWS, $bSkipTilda, $bExtType);
}
elseif ($bExtType && (is_int($value) || is_float($value)))
{
$res .= $value;
}
else
{
if(preg_match("#['\"\\n\\r<\\\\\x80]#", $value))
$res .= "'".JSEscape($value)."'";
else
$res .= "'".$value."'";
}
}
$res .= ($bWS ? "\n" : '').'}';
return $res;
}
elseif(is_bool($arData))
{
if($arData === true)
return 'true';
else
return 'false';
}
elseif ($bExtType && (is_int($arData) || is_float($arData)))
{
return $arData;
}
else
{
if(preg_match("#['\"\\n\\r<\\\\\x80]#", $arData))
return "'".JSEscape($arData)."'";
else
return "'".$arData."'";
}
}
$a=array(
"a0" => "b",
"a1" => "b",
"a2" => "b",
"a3" => "b",
"b" => "c'",
"c" => array(1,2,3),
"d" => true,
"e" => 15.5
);
print_r(PhpToJSObject($a));
- Output for git.master, git.master_jit, rfc.property-hooks
- {'a0':'b','a1':'b','a2':'b','a3':'b','b':'c\'','c':['1','2','3'],'d':true,'e':'15.5'}
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:
48.3 ms | 401 KiB | 8 Q