从javascript

时间:2017-03-15 23:28:11

标签: javascript php smarty explode

我从javascript获取数据值并添加带参数的智能模板。有了一个聪明的功能,我想用php爆炸字符串。

HTML:

 <div class="item-wrapper pre_element_block draggable-column ui-widget-content" data-floated_width="col-md-12" data-width_info="12">

这是javascript:

function row_droppable (droppableContainer) {
    $(droppableContainer).on('drop',function(event,ui){
        if(ui.draggable.hasClass('draggable-column')) {
            id = get_random_string();
            var grid = ui.draggable.attr("data-width_info");
            gridRow = $(`{include file=$oPlugin->cAdminmenuPfad|cat:'templates/ns.cs.grid_row.tpl' grid='` + grid + `' idUnique='`+id+`'}`).appendTo(droppableContainer);
        }
    });  
}

  

模板/ ns.cs.grid_row.tpl

我打电话:

    {js_string_convert string=$grid}

这是我的php / smarty功能:

$smarty->register_function("js_string_convert", "js_string_convert");

function js_string_convert($params,$smarty) {
    if(!empty($params['string'])) {
        $colArr = explode("_", $params['string']);
        $smarty->assign('colArr',$colArr);
    }
}

当我在php中转储数据$params['string']时,它会输出:

 string(12) "4_4_4"

所以我试着爆炸字符串:

$colArr = explode("_", $params['string']);

当我转储$colArr时,它会发出:

array(1) {
    [0] => string(12) "4_4_4"
}

这让我发疯了。它是否与从javascript接收字符串有关?

更新 转储字符串的长度取决于我的javascript中的变量有多长。字符串(12)是因为变量grid太长了。当我将grid更改为adasdasdasdasdasdasd时,字符串为字符串(33),例如

1 个答案:

答案 0 :(得分:0)

var_dump("4_4_4")应该返回字符串( 5 )&#34; 4_4_4&#34;,而不是字符串( 12 )。您可能在字符串中包含不可打印的符号或charset编码问题。

您可以通过以下方式检查字符串:

var_dump( preg_match('/^\d+\_\d+\_\d+$/', $params['string']) );

如果您收到false,那么您的字符串中不仅有[DIGIT][UNDERSCORE][DIGIT][UNDERSCORE][DIGIT](但很明显)。

您可以尝试使用以下三个正整数和两个下划线查找字符串:

preg_match('/\d+\_\d+\_\d+/', $params['string'], $tmp);

如果$ tmp [0]不为空,则可以爆炸$ tmp [0]而不是原始字符串。

或者您可以尝试使用此正则表达式来提取数字:

preg_match('/(\d+).*?(\d+).*?(\d+)/u', $params['string'], $tmp);

$tmp[1]中,$tmp[2]$tmp[3]可以是您的三个号码。