[英]Json encode doesn't work
我想将一个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)
}
您还没有发布任何代码,因此很难说出确切的错误,但是,这是一个适用于您发布的值的简单示例:
$arr = ['Bleu', 1, 'XL'];
echo json_encode($arr);
输出
["Bleu",1,"XL"]
htmlspecialchars()
,我真的不认为你想动态生成javascript代码时使用htmlspecialchars()
。 适当的上下文没有 html(除非你在html属性中内联javascript,我认为这不是这里的情况)。
现在我看到了您发布的代码,我相信您可以通过在javascript上下文中单引引出的json字符串来解决语法错误。
更改:
onclick="loadTaille(<?php echo ${'cl'.$r} ?>);"
至:
onclick="loadTaille('<?php echo ${'cl'.$r} ?>');"
没有明显的理由使用htmlspecialchars()。
如果要直接在html脚本元素中显示json字符串:
<script>
var js_arr = <?php echo json_encode(['Bleu', 1, 'XL']); ?>;
console.log(js_arr);
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.