我想使用http_build_query将数组更改为html标记属性。问题是,它将我的单引号值更改为%27
。所以,如果我有
http_build_query( array("type"=>"'hidden'", ... ), '', ' ' );
我得到了
<input type=%27hidden%27 ...>
我怎样才能解决这个问题?
答案 0 :(得分:3)
您可以在http_build_query
前面添加urldecode()
像:
<?php
urldecode(http_build_query( array("type"=>"'hidden'", ... ), '', ' ' ));
?>
答案 1 :(得分:3)
http_build_query()
旨在将参数数组转换为网址。不要构建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" >
答案 2 :(得分:0)
我猜你可以绕过这个结果rawurldecode()
,但这真的不是http_build_query
的目的。并且它不会在名称/值对之间放置&
,使得输出不能用作input
元素吗?
您可以使用其中一个XML类来执行此操作,但我不确定这是值得的。你在哪里使用它?
答案 3 :(得分:0)
使用此功能的数组中不需要引号:
用于从简单数组创建HTML属性字符串(带引号)的单行程序:
$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"
val trueColumn = lit(true)
答案 4 :(得分:0)
使用递归函数创建隐藏的INPUT:
$buildInputs = function($params, $prefix = '') use (&$buildInputs) {
foreach ($params as $k => $v) {
if (is_array($v)) {
$buildInputs($v, $k);
} else {
if ($prefix) {
$k = $prefix.'['.$k.']';
}
echo '<input type="hidden" name="'.$k.'" value="'.htmlspecialchars($v).'">';
}
}
};
$buildInputs($postdata);