La partie 1 pourrait être assez simple :'a''b' est une alternative pour 'a\'b' et signifie donc la même chose. L'interface utilisateur est sûre que dans les requêtes, la chaîne correcte sera renvoyée, par opposition à la définition de la table.
Pour la partie 2, Nedret Recep vous a donné la bonne réponse. De plus, je me demande comment
echo "<option value='".$imgClass_row[imgClass]."'>"
pourrait jamais entraîner
<option value="Robin" s'="">
. Je m'attendrais plutôt
<option value='Robin's'="">
ce qui est clairement faux, mais peut être résolu avec htmlspecialchars() .
EDIT :j'ai trouvé une explication possible :l'analyseur HTML du navigateur pourrait être à blâmer ici. Avec
<select id="s" onchange="alert(document.getElementById('s').innerHTML + ' value:' + document.getElementById('s').value)">
<option value='Robin's'>a</option>
<option value='Robin's'>b</option>
</select>
Je reçois avec Firefox
<option value="Robin's">a</option>
<option value="Robin" s="">b</option>
value:Robin's
avec option a et
<option value="Robin's">a</option>
<option value="Robin" s="">b</option>
value:Robin
avec option b . Mais c'est après l'analyse et le réassemblage et ce n'est clairement pas le code généré par PHP. Et même alors, où est en axcess ' dans <option value="Robin" s'=""> .