首页 > 解决方案 > 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()?>

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

标签: phpmysqlcodeigniter

解决方案


看到它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 编码字符,因此它们被存储为纯文本和/或未解码。这就是这种奇怪行为的原因。

在不查看代码的情况下很难准确地告诉您如何解决问题。


推荐阅读