我想将一个php数组编码为JSON,所以我可以将它作为一个属性传递给onclick(),这就是为什么我需要htmlspecialcharts;
然后在js函数中我试图使用JSON.parse将其转换为js对象,以便我可以使用我的数组的数据。
但我无法解析它,因为我从编码中得到的语法不正确
最初的php数组是:
array (size=3)
0 => string 'Bleu' (length=4)
1 => int 1
2 => string 'XL' (length=2)
我在它上面使用了htmlspecialchars(json_encode()) 我需要得到的结果是:
jsonTab = '["Bleu",1,"XL"]';
但是在编码后我得到:
Bleu,1,XL
我不知道为什么编码不能正常工作......
代码php我用这个产品的每种颜色的大小来创建php数组:
$couleurs = $pdo ->getCouleurProduit($id);
$nbCouleur = count($couleurs);
$t = 1;
foreach ($couleurs as $uneCouleur)
{
$taille = $pdo ->getTaille($id,$uneCouleur[0]); // renvoie les taille de la couleur
$nbTaille = count($taille); // renvoie le bombrede taille n0 = 1
${'couleur'.$t} = array($uneCouleur[0]); // definie une tableaux nomé "couleurx" avec pour premier element le libelle de la couleur
array_push(${'couleur'.$t}, $nbTaille); // ajoute en second element au tableaux "couleurx" le nombre de taille pour la couleur
for ($i = 0; $i < $nbTaille; $i++ ) // tant que i est inferieur au nombre de taille
{
array_push(${'couleur'.$t}, $taille[$i][0]); // on ajoute au tableaux "couleurx" le libelle (a [0]) de chaque taille [i] du tableaux $taille
}
${'cl'.$t} = htmlspecialchars(json_encode(${'couleur'.$t})); //on creer une variable clx qui prend la valeur encoder en json du tableau "couleurx" actuel
$t++;
}$couleurs = $pdo ->getCouleurProduit($id);
$nbCouleur = count($couleurs);
$t = 1;
foreach ($couleurs as $uneCouleur)
{
$taille = $pdo ->getTaille($id,$uneCouleur[0]); // renvoie les taille de la couleur
$nbTaille = count($taille); // renvoie le bombrede taille n0 = 1
${'couleur'.$t} = array($uneCouleur[0]); // definie une tableaux nomé "couleurx" avec pour premier element le libelle de la couleur
array_push(${'couleur'.$t}, $nbTaille); // ajoute en second element au tableaux "couleurx" le nombre de taille pour la couleur
for ($i = 0; $i < $nbTaille; $i++ ) // tant que i est inferieur au nombre de taille
{
array_push(${'couleur'.$t}, $taille[$i][0]); // on ajoute au tableaux "couleurx" le libelle (a [0]) de chaque taille [i] du tableaux $taille
}
${'cl'.$t} = htmlspecialchars(json_encode(${'couleur'.$t})); //on creer une variable clx qui prend la valeur encoder en json du tableau "couleurx" actuel
$t++;
}
img php数组的属性
$r=1;
foreach ($couleurs as $uneCouleur)
{?>
<img id = "test" src= "./images/<?=${'couleur'.$r}[0]?>.jpg " alt = "lol" onclick="loadTaille(<?php echo ${'cl'.$r} ?>);"/><?php
$r++; //pour chaque couleur du produit on utilise les tableaux couleurx et clx
}?>
和js文件produit.js
function loadTaille(img){
// var txt = "'[" + img + "]'";
// var txt = '["Bleu",1,"XL"]';
var tailles = JSON.parse(img);
alert (img)
}
答案 0 :(得分:0)
您还没有发布任何代码,因此很难说出您错误到底的位置,但是,这是一个适用于您发布的值的简单示例:
$arr = ['Bleu', 1, 'XL'];
echo json_encode($arr);
输出
["Bleu",1,"XL"]
顺便说一句,在动态生成javascript代码时,我真的不认为你想使用htmlspecialchars()
。适当的上下文是 not html(除非您在html属性中内联javascript,我认为这不是这里的情况)。
现在我看到了您发布的代码,我相信您可以通过在javascript环境中单引号呈现的json字符串来解决语法错误。
变化:
onclick="loadTaille(<?php echo ${'cl'.$r} ?>);"
为:
onclick="loadTaille('<?php echo ${'cl'.$r} ?>');"
答案 1 :(得分:0)
没有明显的理由使用htmlspecialchars()。
如果要直接在html脚本元素中显示json字符串:
<script>
var js_arr = <?php echo json_encode(['Bleu', 1, 'XL']); ?>;
console.log(js_arr);
</script>