我想使用http_build_query將數組更改爲html標籤屬性。問題是,它將我的單引號值更改爲%27
。所以,如果我有在http_build_query()中保留單引號?
http_build_query(array("type"=>"'hidden'", ...), '', ' ');
我得到
<input type=%27hidden%27 ...>
我怎樣才能解決這個得到什麼?
我想使用http_build_query將數組更改爲html標籤屬性。問題是,它將我的單引號值更改爲%27
。所以,如果我有在http_build_query()中保留單引號?
http_build_query(array("type"=>"'hidden'", ...), '', ' ');
我得到
<input type=%27hidden%27 ...>
我怎樣才能解決這個得到什麼?
,你可以在http_build_query
像前加urldecode()
。不建立HTML標籤。你可以做幾件事情:
添加所有手動
<input type="<?php echo htmlspecialchars($array['type']); ?>" ...
建立一個輔助函數
function buildArgs($array) {
$ret = '';
foreach ($array as $key => $value) {
$ret .= ' ' . htmlspecialchars($key, ENT_QUOTES) . '="' . htmlspecialchars($value) . '"';
}
return trim($ret);
}
<input <?php echo buildArgs(array('type'=>'hidden', 'name'=>'foo')); ?>>
會產生你:
<input type="hidden" name="foo" >
我想你可以繞過這個做rawurldecode()
的結果,但這真的不是http_build_query
的目的。並且不會在名稱/值對之間放置一個&
,從而使輸出不可用作爲input
元素?
你可以使用其中一個XML類來做到這一點,但我不確定這是值得的。你在哪裏使用這個?
<?php
urldecode(http_build_query(array("type"=>"'hidden'", ...), '', ' '));
?>
第三個參數是結果字符串的參數分隔符,我將其設置爲'''',現在不存在空格而不是&符號。基本上我想做一個'implode()',但也使用它們的鍵。我的數組是'array'('key'=>'value','key'=>'value',...)',我需要那裏的鍵。 – user151841 2010-05-25 16:39:01
http_build_query()
旨在把參數數組到一個URL:
爲什麼在'http_build_query()'幾乎完成我想要的功能時編寫一個新函數? 'urldecode()'使它完美工作。 – user151841 2010-05-25 16:43:11
不,它不能正常工作。 'http_build_query()'將會跳過參數,因爲它們需要位於一個URL中(你可以通過urldecode進行解析)。它不會爲html轉義做任何事情。所以如果你使用它,你會引入XSS漏洞。只是因爲某些東西似乎有效,並不意味着你應該使用它... – ircmaxell 2010-05-25 16:45:35
'urldecode(http_build_query(array_map('htmlspecialchars',&$ arrValues),'',''))''。爲什麼重新發明輪子? – user151841 2010-05-25 17:10:04
無引號是必需的陣列這個函數在:
一個班輪爲HTML的創建字符串屬性(帶引號)從一個簡單的數組:
$attrString = str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";
$attrArray = array("id" => "email",
"name" => "email",
"type" => "email",
"class" => "active large");
echo str_replace("+", " ", str_replace("&", "\" ", str_replace("=", "=\"", http_build_query($attrArray)))) . "\"";
// Output:
// id="email" name="email" type="email" class="active large"
這似乎有點倒退,但它確實有效! – Matthew 2011-05-16 20:24:57