mysql和php函数没有正确显示%百分号

时间:2018-04-29 22:15:08

标签: php mysql codeigniter

我使用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()?>

显然,这只发生在第一个%符号上,第二个符号正确存储。

3 个答案:

答案 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或任何基于拉丁语的字符集,例如双方,你会看到Ê

您的示例中显示的所有其余内容都有效:

    %li中的
  • %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