我正在使用codeigniter构建一个web应用程序。
该应用程序有一个自动配置的多播网络接口,根据卡信息生成无效的ip多播。在app.txt conf文件中输入以下数据
auto_ip4=239.106.%card.%number
它扫描卡号,并在日志上输出ip多播,如本例239.105.2.1所示,工作正常,但在前端webgui上出现问题。
我们有一个保存输入数据并将其存储在mysql数据库中的函数;mysql表记录3个值id、name和value
value函数用于存储239.105.%card.%number的数据
当我按save时,录制的内容如下所示: 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()?>
另外,这只发生在第一个%符号上,第二个符号被正确存储。
3条答案
按热度按时间c9qzyr3d1#
看到了吗
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编码字符,因此它们存储为纯文本和/或未解码。这就是这种奇怪行为的原因。
如果没有看到代码,很难准确地告诉您如何解决问题。
ua4mk5z42#
这是一种咒语。。我在codeigniter应用程序上的字符集设置为utf-8
config.php php代码:$config['charset']='utf-8';
database.php php代码:$db['default']['char\u set']=“iso-8859-1”;//或latin1$db['default']['dbcollat']=“拉丁语1\u常规\u ci”;//或拉丁文、瑞典文
在我的db mysql上,我也尝试过设置相同的数据库,但是仍然有一些问题。。因为数据输入%card作为?rd存储在数据库中,有趣的是,这种情况发生在将复制的数据写入mysql数据库的write函数上,如果我通过phpmyadmin登录到数据库并在值%card上正确输入数据,那么我将刷新用于输入数据的配置页php,以便从数据库中读取数据,数据正确地显示为%card,但当我试图写回db时,它将其编码错误,并将其保存在db上为?rd
pobjuy323#