既然你真的想要选项,一个 JS 对象,这里有一个死星大小的矫枉过正的解决方案来本地解析这些东西。这里的想法是提取您想要的部分,位于 JS 中的 { } JSON 对象之间,然后使用 PHP 的json_decode将其评估为可用的结构。在这段代码中,我将 HTML 片段存储到 $variable0 中。
// expression broken down for readability
$frag = array(
"/<script>",
".*?", # whitespace
"uploadify\(",
"(.*?)", # our desired match
"\);", # closest )
"(.*)", # more whitespace we don't want
"<\/script>/s"
);
// flatten expression into match string
$expr = implode("", $frag );
所以此时,$expr 是/<script>.*?uploadify\((.*?)\);(.*)<\/script>/s
$m = preg_match( $expr, $variable0, $r );
现在 $r 应该是一个数组,其中 $r[1] 包含那个“{...}”片段。这可以使用json_decode进行评估,但是,字符串格式错误,无法使用 json_decode。一方面,键必须用引号括起来(即:上传者:''应该是'上传者':'')在javascript中。从字面上看,$r[1] 看起来像这样:
{
uploader : '/uploadify/uploadify.php',
}
另一个人想出了一个我们可以在这里应用的清洁功能。
// fix thanks to http://stackoverflow.com/a/14075951/415324
function fix_json( $a ) {
$a = preg_replace('/(,|\{)[ \t\n]*(\w+)[ ]*:[ ]*/','$1"$2":',$a);
$a = preg_replace(
'/":\'?([^\[\]\{\}]*?)\'?[ \n\t]*(,"|\}$|\]$|\}\]|\]\}|\}|\])/','":"$1"$2',
$a);
return( $a );
}
// $r[1] will contain innards of uploadify(), which is JSON
$json = fix_json( $r[1] );
这将 $json 变成了 PHP 可以本地解析的东西。$json 现在看起来像:
{"uploader":"/uploadify/uploadify.php',"}
请注意,那里有一个尾随逗号。这是您提取的原始 HTML 中的 javascript 错误,需要在网站上修复。更多关于下面的内容。
$options = json_decode( $json );
至此,我们有了一个可以在 PHP 中使用的对象
var_dump( $options );
object(stdClass)#2 (1) {
["uploader"]=>
string(24) "/uploadify/uploadify.php"
}
因此,您可以轻松访问遇到的任何其他选项,使用echo $options->uploader;
注意:原始 HTML 存在问题 --- 它包含一个尾随逗号,会破坏某些浏览器中的 javascript 解析。认为 FireFox 会稍微松懈一些,但 IE 肯定不会。要修复 JS,请删除选项对象中的尾随逗号:
$("#file_upload_1").uploadify({
uploader : '/uploadify/uploadify.php'
});