UTF-8, XML и htmlentities с PHP / Mysql - PullRequest
       37

UTF-8, XML и htmlentities с PHP / Mysql

0 голосов
/ 19 января 2011

Я нашел много разной / противоречивой информации в Интернете по этой теме, поэтому я надеюсь, что кто-то может помочь мне с этими проблемами:

Мне нужна функция для очистки строки, чтобы ее можно было безопасно вставить в базу данных mysql utf-8 или записать в файл XML utf-8. Символы, которые нельзя преобразовать в utf-8, должны быть удалены.

Для записи в файл XML я также сталкиваюсь с проблемой преобразования html-сущностей в числовые. Htmlspecialchars () работает почти все время, но я прочитал, что этого недостаточно для правильной очистки всех строк, например, такой, которая содержит недопустимую сущность html.

Спасибо за вашу помощь, Брайан

Ответы [ 3 ]

0 голосов
/ 19 января 2011

Как то так?

function cleanse($in) {
    $bad = Array('”', '“', '’', '‘');
    $good = Array('"', '"', '\'', '\'');
    $out = str_replace($bad, $good, $in);
    return $out;
}
0 голосов
/ 19 января 2011

Вы можете преобразовать строку из любой кодировки в UTF-8 с помощью iconv или mbstring:

// With the //IGNORE flag, this will ignore invalid characters
iconv('input-encoding', 'UTF-8//IGNORE', $the_string);

или

mb_convert_encoding($the_string, 'UTF-8', 'input-encoding');
0 голосов
/ 19 января 2011

Вы не сказали, откуда поступали строки, но если вы получаете их из отправки HTML-формы, см. Эту статью:

Настройка кодировки символов в форме отправки для Internet Explorer

Если коротко, вам нужно явно указать браузеру, в какой кодировке вы хотите отправить форму. Если вы укажете UTF-8, вы никогда не получите недействительный UTF-8 из браузера. Если вы хотите защитить себя от ЛЮБОГО типа злонамеренных атак, вам нужно использовать iconv:

http://www.php.net/iconv

$ utf_8_string = iconv ($ from_charset, $ to_charset, $ original_string);

Если вы укажете "utf-8" как $ from_charset, так и $ to_charset, iconv () должна вернуть ошибку, если $ original_string содержит недопустимый UTF-8.

Если вы получаете строки из другого источника и знаете кодировку символов, вы все равно можете использовать iconv (). Типичными кодировками в США являются CP-1252 (Windows) и ISO-8859-1 (все остальное.)

...