我使用codeigniter构建Web应用程序。
此应用程序具有用于多播的自动配置网络接口,该接口根据卡信息生成无效的IP多播。在app.txt conf文件中,我输入以下数据
auto_ip4=239.106.%card.%number
它扫描卡号和日志输出IP多播,如此示例239.105.2.1,这可以正常工作,但在前端webgui上出了问题。
我们有一个保存输入数据并将其存储在mysql数据库中的函数; 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()?>
显然,这只发生在第一个%符号上,第二个符号正确存储。
答案 0 :(得分:1)
看到239.105.%card.%number
变为239.105.?rd.%number
,并且您在评论中指定了使用239.106.%cord.%number
毫无疑问,问题就出现了,因为你在urldecode()
函数的某个地方陷入困境。
选中此https://www.w3schools.com/tags/ref_urlencode.asp
%充当以url编码编码的char的开头。
%CA 被解码为Ê
您的字符串239.105.%card.%number
实际上已成为239.106.Êrd.%number
您会看到?
,因为您的输出应用无法显示Ê,或者因为数据库/表的字符集未管理该特定特殊字符。如果您在utf-8,utf-16或任何基于拉丁语的字符集,例如双方,你会看到Ê
您的示例中显示的所有其余内容都有效:
%nu
%co
in%cord 不是有效的url编码字符,因此它们存储为纯文本和/或未解码。这就是这种奇怪行为的原因。
如果没有看到您的代码,很难告诉您如何解决问题。
答案 1 :(得分:0)
这是某种字符集..我在codeigniter app上的字符集设置为UTF-8
config.php文件
PHP代码:
$ config [&#39; charset&#39;] =&#39; UTF-8&#39 ;;
database.php中 PHP代码: $ db [&#39;默认&#39;] [&#39; char_set&#39;] =&#34; iso-8859-1&#34 ;; //或latin1 $ db [&#39;默认&#39;] [&#39; dbcollat&#39;] =&#34; latin1_general_ci&#34 ;; //或latin1_swedish_ci
并且在我的db mysql上我试过设置相同但有些东西仍然给我带来问题..因为数据输入%卡它被存储在数据库上了,有趣的是这只发生在复制的写入功能上数据到mysql DB,如果我通过phpmyadmin登录到数据库并在值%卡上正确输入数据,那么我刷新配置页面php我用来输入数据从数据库读取数据,数据显示正确作为%卡,但当我尝试写回数据库时,它编码错误并将其保存在数据库上?rd
答案 2 :(得分:0)
Exception in thread "main" org.apache.avro.AvroTypeException: Expected start-union. Got VALUE_STRING