为何PHP传递含空格的字符串参数时modal模态框无法正常工作
问题成因
- URL 规范不允许直接出现空格等特殊字符,你的代码直接把带空格的
$mm2和$row["book_name"]拼接到 href 属性中,会导致 URL 结构被破坏,浏览器无法正确识别链接参数,同时还可能引发属性值引号匹配异常,干扰data-toggle、data-target这类 Bootstrap 模态框触发属性的正常解析,最终模态框无法弹出。 - 额外隐藏问题:你写的
<tr class="$page">放在了 PHP 单引号字符串中,单引号不会解析内部变量,$page会原样输出,不会替换为实际的类名。
修复方案
- 所有需要拼接到 URL 参数中的字符串,都用 PHP 内置的
urlencode()函数编码,空格会被转义为符合规范的+或%20,不会破坏 URL 结构 - 修正 tr 类名的变量解析问题,拆分单引号拼接变量
- 修正未闭合的
h1标签
修复后代码如下:
$mm="you"; $mm2="how are you"; while($row = mysqli_fetch_assoc($result)) { // 提前对所有URL参数做编码 $encoded_mm = urlencode($mm); $encoded_mm2 = urlencode($mm2); $encoded_book_name = urlencode($row["book_name"]); // 拼接tr的class变量 echo '<tr class="'.$page.'">'; echo '<td class="text-center">' . $i . '</td>'; echo '<td class="text-center">' . $row['book_name'] . '</td>'; echo '<td class="text-center">' . $row['book_writer'] . '</td>'; echo '<td class="text-center">' . $row['book_unit'] . '</td>'; echo '<td class="text-center">' . $row['book_category'] . '</td>'; echo '<td class="center"> <a data-toggle="modal" class="delete" data-target="#myModal" href="iframe.php?id=80&ss=' . $encoded_mm . '&ss2=' . $encoded_mm2 . '&mydiv=125&book_name=' . $encoded_book_name .'"> <h1>showIFRAME2</h1> </a> </td>'; $i++; }
补充说明:后端 iframe.php 中直接通过
$_GET['ss2']、$_GET['book_name']即可拿到原始带空格的字符串,PHP 会自动对 URL 编码的参数做解码,无需额外处理。
内容的提问来源于stack exchange,提问作者eli
相关产品推荐
相关产品推荐

