Помогите с кодировкой пожалуйста

Рейтинг: -1Ответов: 2Опубликовано: 16.04.2015

Сохраняю данные в базу русскими буквами но в базу записываются иероглифы. После соединения с базой прописано mysql_query("SET NAMES 'cp1251'"); Все проверил, и база в той же кодировке. Вот форма:

    <script>
    $(document).ready(function(){ 
     $('#Data_profForm').submit(function(){  
       var data = {
        phone: $('#phone').val(),
        skype: $('#skype').val(),
        vk: $('#vk').val()
    }
                    $.ajax({  
                        type: "POST",  
                        url: "editprofile_form.php?action=save_profile",  
                        data: data,
                        success: function(html){  
                        $('#Data_profResult').fadeIn(200).css('display','block');
                        setTimeout(function(){
                        $('#Data_profResult').fadeOut(1000).css('display','block');
                        }, 1500);
                        $('#Data_profResult').html(html).css('display','block');                        
                     }  
                    });  
                    return false;  
                });  
    });
    </script>
    <?php
    defined('ACCESS') or die();
    ?>
    <table class="table" style="float:left;width:50%;background: rgba(91,80,73,0.7); margin-bottom:1px;">
    <div id="Data_profResult"></div>
    <form id="Data_profForm" method="post">

 <tr>
    <td align="left" style="padding-left: 90px;padding-top: 5px;">
    <div style="padding-bottom: 5px;">Телефон:</div>
    <input id="phone" class="form-control input-lg text-center rtl-rev rtl ng-pristine ng-valid-required ng-valid-pattern ng-valid-maxlength ng-valid-parse ng-valid-server ng-valid-nmin ng-valid ng-valid-nmax ng-touched"  type='text' name='phone' value="<?php print $user_phone; ?>" size="30" maxlength="20"/ style="width: 325px; height: 34px; cursor:auto;border-radius: 2px;background: none;font-size: 15px;color:#d4d3d3;text-align: left !important;">
    </td>
    </tr>

    <tr>
    <td align="left" style="padding-left: 90px;padding-top: 5px;">
    <div style="padding-bottom: 5px;">Skype:</div>
    <input id="skype" class="form-control input-lg text-center rtl-rev rtl ng-pristine ng-valid-required ng-valid-pattern ng-valid-maxlength ng-valid-parse ng-valid-server ng-valid-nmin ng-valid ng-valid-nmax ng-touched"  type='text' name='skype' value="<?php print $user_skype; ?>" size="30" maxlength="20"/ style="width: 325px; height: 34px; cursor:auto;border-radius: 2px;background: none;font-size: 15px;color:#d4d3d3;text-align: left !important;">
    </td>
    </tr>

    <tr>
    <td align="left" style="padding-left: 90px;padding-top: 5px;">
    <div style="padding-bottom: 5px;">Вконтакте:</div>
    <input id="vk" class="form-control input-lg text-center rtl-rev rtl ng-pristine ng-valid-required ng-valid-pattern ng-valid-maxlength ng-valid-parse ng-valid-server ng-valid-nmin ng-valid ng-valid-nmax ng-touched"  type='text' name='vk' value="<?php print $user_vk; ?>" size="30" maxlength="50"/ style="width: 325px; height: 34px; cursor:auto;border-radius: 2px;background: none;font-size: 15px;color:#d4d3d3;text-align: left !important;">
    </td>
    </tr>


  <tr>
    <td align="left" style="padding-left: 90px;padding-bottom: 25px;">
    <input class="btn btn-success" type="submit" name="submit" value="Изменить" style="margin: 0px 0px 0px;padding: 6px;width: 325px;border-radius: 2px;">
    </td>
    </tr> 
    </form>
    </table>

Вот обработчик:

if ($_GET['action'] == 'save_profile') {
        $phone  = htmlspecialchars($_POST['phone'], ENT_QUOTES);
        $skype  = addslashes(htmlspecialchars($_POST['skype'], ENT_QUOTES, ''));
        $vk = addslashes(htmlspecialchars($_POST['vk'], ENT_QUOTES, ''));

    if (!$phone) {
            print 'Укажите номер телефона';
              } else {
                  mysql_query("UPDATE users SET phone = '".$phone."', skype = '".$skype."', vk = '".$vk."' WHERE id = ".$user_id." LIMIT 1");
            print "Данные успешно обновлены";
            }
}

Да и еще, когда я убираю сохранение данных через ajax то все нормально, в базу записываются нормальные русские буквы.

Ответы

▲ 2

Попробуйте использовать функцию iconv(). Пример кода:

$string = 'русские буквы';
$output = iconv('UTF-8', 'WINDOWS-1251', $string);

где UTF-8 это кодировка обрабатываемой строки, WINDOWS-1251 - кодировка на выходе, $string - строка, которую нужно обработать.
В БД записать $output.

Посмотреть мануал.

▲ 1

АЯКС всегда работает только в кодировке utf-8 То есть, перед сохранением данных, полученных аяксом, надо либо выполнять

SET NAMES utf8

(а после записи вернуть на cp1251 если планируется еще работа с базой)

либо перекодировать данные в 1251 срествами РНР