2011-12-10 23 views
5

Tôi có một mảng các giá trị mà tôi muốn chạy qua htmlspecialchars nhưng với một cuộc tranh cãi như thế này:Có cách nào để gửi các tham số vào một hàm gọi lại mà không cần tạo hàm của riêng tôi trước không?

$param = htmlspecialchars($param, ENT_QUOTES); 

Vấn đề là, tôi có một mảng các giá trị mà tôi muốn chạy htmlspecialchars trên:

$array = array_map('htmlspecialchars', $array); 

và tôi muốn biết liệu có cách nào vượt qua ENT_QUOTES vào cuộc gọi lại array_map không?

Tôi luôn có thể sử dụng chức năng của riêng mình sử dụng htmlspecialchars, nhưng nó sẽ là tốt đẹp nếu có một cách để làm điều này rồi.


Sau câu trả lời dưới đây, đây là kết quả cuối cùng của tôi:

$array = array_map('htmlspecialchars', $array, array_fill(0, count($array), ENT_QUOTES)); 

Mà chỉ đơn giản là điền vào một mảng với càng nhiều giá trị như $ mảng có và nó chứa đầy ENT_QUOTE.

Trả lời

3

này nên có tác dụng nếu bạn vượt qua một mảng thứ hai là tham số để array_map sẽ chứa nhiều ENT_QUOTES yếu tố như số điện thoại của các yếu tố trong $array:

$quote_style = ENT_QUOTES; 
$array = array('"',"'","''''''''''''\""); 
$ent_quotes_array = array($quote_style, $quote_style, $quote_style); 
$array = array_map('htmlspecialchars', $array, $ent_quotes_array); 
print_r($array); 

Hoặc, một chút thanh lịch hơn:

$array = array('"',"'","''''''''''''\""); 
$ent_quotes_array = array_fill(0, sizeof($array), ENT_QUOTES); 
$array = array_map('htmlspecialchars', $array, $ent_quotes_array); 
+1

Trong trường hợp đó, array_fill làm việc cho những gì tôi cần. Cảm ơn –

0

đây là chức năng đầu ra giúp đỡ tôi ...

function change_values_for_encode_output(&$item, $key) { 
    $item = htmlentities($item, ENT_QUOTES); 
} 

function encode_output_vars($vars) { 
    if(is_array($vars)) { 
     array_walk_recursive($vars, 'change_values_for_encode_output'); 
     return $vars; 
    } 
    else { 
     $vars = htmlentities($vars, ENT_QUOTES); 
        return $vars; 
    } 
} 
+0

Đây không phải là những gì tôi đang tìm kiếm. Như tôi đã đề cập, tôi đang tìm cách để làm điều này mà không cần tạo một chức năng mới cho cuộc gọi lại. –

Các vấn đề liên quan