2012-09-08 140 views
0

我想知道在我的代码中添加了斜杠的位置。 我使用Ignited Datatables (native-php-version)来为MySQL中的数据生成ajax表。如何从代码中删除斜杠?

来自MySQL的数据显示为我想要的,但Ignited Datatables函数允许我将额外的列添加到表中并且问题从那里开始。

这就是我如何初始化添加额外的列:

->add_column('edit', '<a class="btn btn-mini btn-success" data-toggle="modal" href="#?page=customers-database-edit&id=$1">Edit</a>', 'face_id'); 

额外列我加入应该仅包含链接,但在某些原因,JSON是这样产生的:

\n<a class="\&quot;btn" btn-mini="" btn-success\"="" data-toggle="\&quot;modal\&quot;" href="\&quot;?page=customers-database-edit&amp;id=3\&quot;">Edit&lt;\/a&gt; \n</a> 

所以当你看到问题是代码被破坏,太多的斜线。

的代码这是和平承担一切将与链接额外的列:

public function add_column($column, $content, $match_replacement = NULL) 
{ 
$this->add_columns[$column] = array('content' => $content, 'replacement' => $this->explode(',', $match_replacement)); 
return $this; 
} 

foreach($this->add_columns as $field => $val) 
    if($this->check_mDataprop()) 
    $aaData[$row_key][$field] = $this->exec_replace($val, $aaData[$row_key]); 
    else 
    $aaData[$row_key][] = $this->exec_replace($val, $aaData[$row_key]); 


protected function exec_replace($custom_val, $row_data) 

{ 
    $replace_string = ''; 

    if(isset($custom_val['replacement']) && is_array($custom_val['replacement'])) 
    { 
    foreach($custom_val['replacement'] as $key => $val) 
    { 
     $sval = preg_replace("/(?<!\w)([\'\"])(.*)\\1(?!\w)/i", '$2', trim($val)); 
     if(preg_match('/(\w+)\((.*)\)/i', $val, $matches) && function_exists($matches[1])) 
     { 
     $func = $matches[1]; 
     $args = preg_split("/[\s,]*\\\"([^\\\"]+)\\\"[\s,]*|" . "[\s,]*'([^']+)'[\s,]*|" . "[,]+/", $matches[2], 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 

     foreach($args as $args_key => $args_val) 
     { 
      $args_val = preg_replace("/(?<!\w)([\'\"])(.*)\\1(?!\w)/i", '$2', trim($args_val)); 
      $args[$args_key] = (in_array($args_val, $this->columns))? ($row_data[($this->check_mDataprop())? $args_val : array_search($args_val, $this->columns)]) : $args_val; 
     } 

     $replace_string = call_user_func_array($func, $args); 
     } 
     elseif(in_array($sval, $this->columns)) 
     $replace_string = $row_data[($this->check_mDataprop())? $sval : array_search($sval, $this->columns)]; 
     else 
     $replace_string = $sval; 

     $custom_val['content'] = str_ireplace('$' . ($key + 1), $replace_string, $custom_val['content']); 
    } 
    } 

    return $custom_val['content']; 
} 

我有点困惑,在此添加该斜线和whay该链接的代码坏了?

这里是JSON是如何产生的:

protected function jsonify($result = FALSE) 
    { 
     if(is_null($result)) return 'null'; 
     if($result === FALSE) return 'false'; 
     if($result === TRUE) return 'true'; 

     if(is_scalar($result)) 
     { 
     if(is_float($result)) 
      return floatval(str_replace(',', '.', strval($result))); 

     if(is_string($result)) 
     { 
      static $jsonReplaces = array(array('\\', '/', '\n', '\t', '\r', '\b', '\f', '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"')); 
      return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $result) . '"'; 
     } 
     else 
      return $result; 
     } 

     $isList = TRUE; 

     for($i = 0, reset($result); $i < count($result); $i++, next($result)) 
     { 
     if(key($result) !== $i) 
     { 
      $isList = FALSE; 
      break; 
     } 
     } 

     $json = array(); 

     if($isList) 
     { 
     foreach($result as $value) 
      $json[] = $this->jsonify($value); 
     return '[' . join(',', $json) . ']'; 
     } 
     else 
     { 
     foreach($result as $key => $value) 
      $json[] = $this->jsonify($key) . ':' . $this->jsonify($value); 
     return '{' . join(',', $json) . '}'; 
     } 
    } 
    } 
+1

你举的例子不是实际的JSON,我想这是包含在JSON字符串的一部分。请张贴实际生成的JSON,因为斜杠很可能正确放置在那里。 – lanzz

回答

0

要从JSON数据删除斜线,您可以使用PHP的stripslashes()function

这样:stripslashes($your_data);