我在search.php文件下面:
<?php
$q = $_GET["q"];
?>
<html>
...
<input id="inp" type="text">
...
...
<script>
// here i'm trying to avoid harmful user input with htmlspecialchars
document.getElementById("inp").value = "<?php echo htmlspecialchars($q); ?>";
</script>
...
</html>
当我请求search.php?q = Adam(或任何A-Z,a-z)时它正常工作。但是当我搜索&#34;或\输入值与$ _GET [&#34; q&#34;]值不同。
但如果我搜索&#34;它添加\,见下图。
我需要的是将输入值设置为$ _GET [&#34; q&#34;]。有没有更好的解决方案?
答案 0 :(得分:4)
// here i'm trying to avoid harmful user input with htmlspecialchars document.getElementById("inp").value = "<?php echo htmlspecialchars($q); ?>";
您正在生成 JavaScript ,而不是HTML。
(虽然它嵌入在HTML文档中,但<script>
元素被定义为包含CDATA,因此HTML的常规规则不适用。)
将PHP数据结构或基元转换为JavaScript兼容格式的适当工具是json_encode
。
document.getElementById("inp").value = <?php echo json_encode($q); ?>;