Дополнительная точка с запятой в конце значения, когда строка содержит знак амперсанда - PullRequest
2 голосов
/ 22 октября 2011

Я использую Codeginiter и вижу точку с запятой, добавленную в конец строки при использовании знака амперсанда.Увидеть ниже.Кстати, я сохраняю значение в БД MySQL.

Я использую htmlspecialchars перед тем, как вставить значение в БД.

$this->form_validation->set_rules('item_name','description','trim|required|min_length[3]|xss_clean');       

Это работает:

$string = "you & I";
// Displays "you & i"

Это добавляет точку с запятой в БД:

$string = "you&i";   
// Displays "you&i;"

Ответы [ 3 ]

4 голосов
/ 22 октября 2011

Вы используете xss_clean "особенность" CI, которая только что сломана.Не ожидайте, что ваши данные выживут, если вы примените xss_clean где-нибудь.

Вместо этого отключите его, и все должно быть в порядке.

Затем отфильтруйте данные соответствующим образом.Предложение действительно использовать xss_clean просто вводит в заблуждение в документации CodeIgniter.Береги себя.

1 голос
/ 22 октября 2011

Я думаю, это потому, что &i интерпретируется как сущность.Я предлагаю вам преобразовать все специальные символы html (как &, <, > и т. Д.) С соответствующими им htmlentities .В php вы можете сделать это, используя функции htmlspecialchars и htmlentities .

0 голосов
/ 25 октября 2016

Перед сохранением данных в базе данных данные POST уже были загрязнены.

Кстати, я тоже использую CI Framework.

Пример, данные на стороне клиента на стороне
Cow&Gate/英国牛栏
используя обычный метод отправки формы, и что вы получите в PHP Server Side?

Вы получите
Cow&Gate;/英国牛栏
Как ни странно, точка с запятой была добавлена ​​

Если вы публикуете данные с помощью XML (или ajax или jquery), вы можете использовать encodeURIComponent метод в javascript для кодирования данных перед их отправкой на сервер, и вам не нужно было бы выполнять какую-либо дополнительную работу на стороне сервера PHP.

Например: $.post('http-server-API', {"field": encodeURIComponent('Cow&Gate/英国牛栏')})

Проверьте параметры $ _POST на стороне сервера PHP (точка с запятой не будет добавлена)
enter image description here

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