我从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),例如
答案 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]
可以是您的三个号码。