为什么PHP字符串变量在表单中使用时会在空格处截断?
问题根因
字符串截断的核心原因是你没有对输出到HTML属性的变量做HTML实体转义,且部分表单字段的value属性未统一包裹引号。当变量值包含空格、引号等HTML特殊字符时,浏览器会将这些字符识别为属性结束标记,导致后续内容被截断或识别为无效属性。
解决方法
使用PHP内置函数htmlspecialchars()对所有输出到HTML属性的变量做转义,该函数会将引号、&、<>等特殊字符转换为HTML实体,避免破坏HTML结构,同时指定ENT_QUOTES参数同时转义单、双引号,适配不同的属性包裹方式。
修改后的代码示例
<?php include "msbkeys.php"; if(isset($_POST['editcontractor'])) { $contractorid = $_POST['contractorid']; $contractorfirstname = $_POST['contractorfirstname']; $contractorlastname = $_POST['contractorlastname']; $contractorcompany = $_POST['contractorcompany']; $contractoremail = $_POST['contractoremail']; $contractorphone = $_POST['contractorphone']; echo $contractorcompany; echo "<form method='POST'> <input type='hidden' name='contractorid' value='" . htmlspecialchars($contractorid, ENT_QUOTES) . "'> First name: <input type='text' name='firstname' value='" . htmlspecialchars($contractorfirstname, ENT_QUOTES) . "'> <br/> Last name: <input type='text' name='lastname' value='" . htmlspecialchars($contractorlastname, ENT_QUOTES) . "'> <br/> Company: <input type='text' name='company' value='" . htmlspecialchars($contractorcompany, ENT_QUOTES) . "'> <br/> Email: <input type='text' name='email' value='" . htmlspecialchars($contractoremail, ENT_QUOTES) . "'> <br/> Phone: <input type='text' name='phone' value='" . htmlspecialchars($contractorphone, ENT_QUOTES) . "'> <br/> <input type='submit' name='updatecontractor' value='Submit'> </form>"; } mysqli_close($db); // Close connection ?>
额外说明
所有HTML属性值都统一用引号包裹,配合htmlspecialchars()转义后,哪怕变量值包含空格、单引号、双引号也不会破坏HTML结构,浏览器会自动将转义后的实体还原为原始字符,不会出现截断问题。
内容的提问来源于stack exchange,提问作者Tom Mitchell
相关产品推荐
相关产品推荐

