php - mysql 和 php 函数未正确显示 % 百分比符号
问题描述
我正在使用 codeigniter 来构建一个 Web 应用程序。
这个应用程序有一个用于组播的自动配置网络接口,它根据卡信息生成无效的 IP 组播。在 app.txt conf 文件中,我输入以下数据
auto_ip4=239.106.%card.%number
它扫描卡号并在日志中输出 IP 多播,如本例 239.105.2.1 并且工作正常,但在前端 webgui 上出现问题。
我们有一个函数可以保存输入数据并将其存储在 mysql db 中;mysql 表记录 3 个值 ID、NAME、VALUE
值函数是数据存储的地方 239.105.%card.%number
当我按下保存时,记录的看起来像这样:239.105.?rd.%number
当我导出它时,文本配置文件看起来像这样
auto_ip4=239.106.?rd.%number
这是将数据值保存到 mysql 数据库中的 PHP 表单代码
<?=form_open('config/edit/'.$config->id.'/valid')?>
<table class="form">
<tr>
<th>Config param</th>
<td><?=$config->name?></td>
<td><input type="text" name="value" value="<?=$config->value?>" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Save"/></td>
</tr>
</table>
<?=form_close()?>
显然,这只发生在第一个 % 符号上,第二个被正确存储。
解决方案
看到它239.105.%card.%number
变成239.105.?rd.%number
了,并且您在注释中指定了正确使用的文本239.106.%cord.%number
毫无疑问,问题的发生是因为您在某处弄乱了该urldecode()
功能。
检查这个https://www.w3schools.com/tags/ref_urlencode.asp
% 充当字符的开头以在 url 编码中进行编码。
%CA被解码为Ê
您的字符串239.105.%card.%number
实际上已成为239.106.Êrd.%number
您会看到一个?
,因为您的输出应用程序无法显示 Ê,或者因为您的数据库/表的字符集不管理该特定的特殊字符。例如,如果您使用的是 utf-8、utf-16 或任何基于拉丁语的字符集,那么在两侧,您会看到 Ê
您的示例中显示的所有其余部分都有效:
%nu
在 % 数字%co
在 % 线
不是有效的 url 编码字符,因此它们被存储为纯文本和/或未解码。这就是这种奇怪行为的原因。
在不查看代码的情况下很难准确地告诉您如何解决问题。
推荐阅读
- android - 使用 Glide 获取头部数据
- regex - 用于重写某些字符串的 Sed 脚本
- java - 代理设置在 Jersey ClientConfig 中不起作用
- shell - 使用 cURL 向 API REST 验证 OAuth2
- html - 如何在 Ctrl+Shift+I 检查器中覆盖正文标记
- python - 加载和读取图像的筛选特征
- java - 如何单击 selenium webdriver 中的多个复选框?
- angular - 在角度 2+ 中,无法捕获来自 HttpClient 响应的数据
- odbc - 与 OpenEdge 10.2B 的 ODBC 连接
- ios - 如何在 iOS 的状态栏中显示视图?