mysql и php не правильно отображают процентный знак - PullRequest
0 голосов
/ 30 апреля 2018

Я использую codeigniter для создания веб-приложения.

Это приложение имеет автоконфигурацию Сетевой интерфейс для многоадресной рассылки, который генерирует недействительную многоадресную рассылку IP на основе информации о карте. В файле app.txt conf я ввожу следующие данные

auto_ip4=239.106.%card.%number

сканирует номер карты и в журнале выдает многоадресную IP-рассылку, как в этом примере 239.105.2.1, и это работает правильно, но в веб-интерфейсе внешнего интерфейса все идет не так.

У нас есть функция, которая сохраняет входные данные и сохраняет их в базе данных mysql; таблица mysql записывает 3 значения ID, ИМЯ, ЗНАЧЕНИЕ

Функция значения - это место, где данные хранятся в хранилище. 239,105.% Карт.% Число

Когда я нажимаю «Сохранить», записанное выглядит следующим образом: 239.105.?rd.%number, а когда я экспортирую его, текстовый файл конфигурации выглядит следующим образом

auto_ip4=239.106.?rd.%number 

Это код формы PHP, который сохраняет значение данных в базе данных mysql

<?=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 голосов
/ 08 мая 2018

это какая-то кодировка .. моя кодировка в приложении codeigniter установлена ​​на UTF-8
config.php PHP-код: $ config ['charset'] = 'UTF-8';

database.php PHP-код: $ db ['default'] ['char_set'] = "iso-8859-1"; // или latin1 $ db ['default'] ['dbcollat'] = "latin1_general_ci"; // или latin1_swedish_ci

и на моем db mysql я попытался установить то же самое, но что-то все еще вызывает у меня проблемы .. потому что карта ввода данных% хранится на БД как? Rd, интересно, это просто происходит с функцией записи скопированного данные в базу данных mysql, если я войду через базу данных через phpmyadmin и правильно введу данные на карту% value, то обновлю страницу конфигурации php, которую я использую для ввода данных для считывания данных из базы данных, данные отображаются правильно, как% card, но когда я пытаюсь записать обратно в базу данных, он неправильно ее кодирует и сохраняет в базу данных как? rd

0 голосов
/ 08 мая 2018
<?php
/**

 */

class Config_model extends Model {
    var $id;
    var $name;
    var $value;

    public function __construct() {
        parent::Model();
    }

    public function findAll() {
        $query = $this->db->get('config');
        return $query->result();
    }

    public function find($id) {
        $query = $this->db->get_where('config', array('id' => $id));
        return $query->row();
    }

    public function findOneByName($name) {
        $query = $this->db->get_where('config', array('name' => $name));
        return $query->row();
    }

    public function countAll() {
        $query = $this->db->get('config');
        return $query->num_rows();
    }

    public function add($data) {
        $this->db->insert('config', $data);
        return $this->db->insert_id();
    }

    public function delete($id) {
        if ($this->db->delete('config', array('id' => $id))) return true;
    }

    public function update($id, $data) {
        $this->db->where('id', $id);
        $this->db->update('config', $data);
    }
}
0 голосов
/ 30 апреля 2018

Видя, что 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, поэтому они хранятся в виде обычного текста и / или не декодируются. Это причина такого странного поведения.

Трудно сказать вам точно, как решить проблему, не видя ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...