За последние 24 часа нас посетил 22791 программист и 1258 роботов. Сейчас ищут 723 программиста ...

Форма генерирует неверную кодировку

Тема в разделе "Сделайте за меня", создана пользователем azkabeyn, 1 мар 2017.

Метки:
  1. azkabeyn

    azkabeyn Новичок

    С нами с:
    1 мар 2017
    Сообщения:
    4
    Симпатии:
    0
    http://bolgaria.top/kontakty/ - русская
    http://bolgaria.top/cont/ - англ

    2 формы обратной связи:
    русская форма генерирует html с крякозябрами(открыть хром тулс на поле имя или любой другом русском поле"
    английская работает нормально. Плагин не мой, но не могу сообразить в какую сторону копать, чтобы исправить. На хостинге отключал привязку к кодировке, не помогло.

    Тоесть оно генерирует html согласно введеных в неё данных, данные вводятся на русском, из за этого форма не работает как нужно.

    PHP:
    1.     <div class="zn_contact_form_container contactForm <?php echo $this->data['uid']; ?>">
    2.             <?php echo $title; ?>
    3.             <?php if (!empty($description)) { ?>
    4.                 <div class="zn_description"><?php echo wpautop($description); ?></div>
    5.             <?php } ?>
    6.             <?php
    7.             if ( $fields ) {
    8.  
    9.                 echo '<form action="'.esc_url( get_permalink( zn_get_the_id() ) ).'" method="post" class="zn_contact_form row" >';
    10.  
    11.                     if ( $captcha ) {
    12.                         $fields[] = array( 'name' => 'zn_captcha' , 'type' => 'captcha' , 'validation' => 'captcha' , 'width' => 'col-sm-12' );
    13.                     }
    14.                     $fields[] = array( 'name' => 'zn_pb_form_submit_'.self::$form_id ,'validation' => 'none', 'type' => 'hidden', 'width' => 'col-sm-12' );
    15.                    
    16.                     $this->form_fields = $fields;
    17.  
    18.                     // PRINT OUT THE FORM FIELDS
    19.                     echo $this->create_form_elements();
    20.  
    21.                     echo '<div class="col-sm-12">';
    22.  
    23.                     if ( $this->submit && $this->form_send() ){
    24.                         $response = $sent_message;
    25.                     }
    26.                     elseif( isset( $_POST['zn_pb_form_submit_'.self::$form_id] ) ){
    27.                         $response = __( 'There was a problem submiting your message. Please try again.', 'zn_framework' );
    28.                     }
    29.  
    30.                     echo '<div class="zn_contact_ajax_response titleColor" id="zn_form_id'.self::$form_id.'" >'.$response.'</div>';
    31.  
    32.                     echo' <span class="zn_submit_container"><button class="zn_contact_submit btn '.$button_style.'" type="submit">'.$submit_label.'</button></span></div>';
    33.  
    34.                     if ($redirect_to_url && !empty($redirect_url)){
    35.                         echo '<input type="hidden" class="zn_form_field_redirect_url" value="'.esc_attr($redirect_url).'"/>';
    36.                     }
    37.  
    38.                 echo '</form>';
    39.  
    40.  
    41.             }
    42.             ?>
    43.  
    44.         </div>
    45.  
    46.     <?php
    47.     }
    48.  
    49.     function create_form_elements() {
    50.  
    51.         // THIS WILL BE INCREMENTED IF THE GENERATED ID IS NOT OK
    52.         $i = 0;
    53.  
    54.         foreach( $this->form_fields as $key => $field )
    55.         {
    56.             if( isset($field['type']) && method_exists($this, $field['type']))
    57.             {
    58.                 $value = $validation_class = '';
    59.  
    60.                 //** For output element, set its value to its name
    61.                 if( $field['type'] == 'output' ) {
    62.                     $value = $field['name'];
    63.                 }
    64.                
    65.                 // SET THE FIELD ID FROM NAME AND FALLBACK TO THE INCREMENTED ID
    66.                 $id = zn_sanitize_string( $field['name'] , false , true );
    67.                 if( $field['type'] != 'hidden' ) {
    68.                     $id = 'zn_form_field_'.$id.$i;
    69.                 }
    70.                 $i++;
    71.                
    72.  
    73.                 //$validation_class = $field['validation'] != 'none' ? $field['validation'] : '';
    74.  
    75.                 // ADD THE VALUE IF IT'S SET
    76.                 if ( !empty( $_POST[$id] ) ) $value = $_POST[$id];
    77.  
    78.                 // PERFORM THE VALUE VALIDATION
    79.                 if ( $field['validation'] != 'none' && isset( $_POST[$id] ) ) {
    80.                     $validation_class .= ' '.$this->validate_field( $field , $id , $value );
    81.                 }
    82.  
    83.                 echo '<p class="'.$field['width'].' '.$validation_class.' zn_form_field zn_'.$field['type'].'">';
    84.                     //$this->$field['type']( $field , $id , $value );
    85.                     call_user_func(array($this,$field['type']), $field , $id , $value); //** This fixes incompatibility with PHP 7.0.3
    86.                 echo '</p>';
    87.  
    88.             }
    89.         }
    90.  
    91.     }
    92.  
    93.  
    94. /* WILL OUTPUT A TEXT FIELD */
    95.     function text( $field , $id , $value ) {
    96.  
    97.         echo '<input type="text" name="'.$id.'" id="'.$id.'" placeholder="'.esc_attr($field['name']).'" value="'.esc_attr($value).'" class="zn_form_input zn_validate_'.$field['validation'].'" />';
    98.  
    99.     }
     
    #1 azkabeyn, 1 мар 2017
    Последнее редактирование: 1 мар 2017
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    encoding.jpg

    Где код?
     
    [vs] нравится это.
  3. azkabeyn

    azkabeyn Новичок

    С нами с:
    1 мар 2017
    Сообщения:
    4
    Симпатии:
    0
    Вот тут собирается текстовое поле, сверху как оно генерируется.
    PHP:
    1. /* WILL OUTPUT A TEXT FIELD */
    2.     function select( $field , $id , $value ) {
    3.  
    4.         $select_options = explode(',',$field['select_option']);
    5.  
    6.         if( is_array($select_options) ) {
    7.             echo '<select name="'.$id.'" id="'.$id.'" class="zn_form_input zn_validate_'.$field['validation'].'">';
    8.                 //if ( !empty( $field['name'] ) ) { echo '<option value="">'.$field['name'].'</option>'; }
    9.                 foreach ($select_options as $key => $value) {
    10.                     $options = explode( ':',$value );
    11.                     if ( is_array($options) ) {
    12.                         $select_key = trim($options[0]);
    13.                         $select_value = trim($options[1]);
    14.  
    15.                         $selected = $select_key == $value ? 'selected="selected"' : '';
    16.  
    17.                         echo '<option value="'.esc_attr($select_key).'" '.$selected.'>'.$select_value.'</option>';
    18.                     }
    19.  
    20.                 }
    21.             echo '</select>';
    22.         }
    23.  
    24.     }
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    может там в контроллере где-то отправка идёт на почту?
     
  5. azkabeyn

    azkabeyn Новичок

    С нами с:
    1 мар 2017
    Сообщения:
    4
    Симпатии:
    0
    Дело в том, что почту оно отправляет, но только если дать имена все полям английскими символами.
    http://bolgaria.top/cont/ - вот тут работает как надо.
    http://bolgaria.top/kontakty/ - а вот тут оно не может задать поле с имененем "имя" - хтмл получается следующим - zn_form_field_�_����0
     
  6. azkabeyn

    azkabeyn Новичок

    С нами с:
    1 мар 2017
    Сообщения:
    4
    Симпатии:
    0
    Создание элемента:
    $id - оно задает как name, которое не проверяет на русский текст. Что в таком случае нужно сделать?
    // SET THE FIELD ID FROM NAME AND FALLBACK TO THE INCREMENTED ID
    $id = zn_sanitize_string( $field['name'] , false , true );
    if( $field['type'] != 'hidden' ) {
    $id = 'zn_form_field_'.$id.$i;
    }
    $i++;


    Код (Text):
    1.     function create_form_elements() {
    2.  
    3.         // THIS WILL BE INCREMENTED IF THE GENERATED ID IS NOT OK
    4.         $i = 0;
    5.  
    6.         foreach( $this->form_fields as $key => $field )
    7.         {
    8.             if( isset($field['type']) && method_exists($this, $field['type']))
    9.             {
    10.                 $value = $validation_class = '';
    11.  
    12.                 //** For output element, set its value to its name
    13.                 if( $field['type'] == 'output' ) {
    14.                     $value = $field['name'];
    15.                 }
    16.                
    17.                 // SET THE FIELD ID FROM NAME AND FALLBACK TO THE INCREMENTED ID
    18.                 $id = zn_sanitize_string( $field['name'] , false , true );
    19.                 if( $field['type'] != 'hidden' ) {
    20.                     $id = 'zn_form_field_'.$id.$i;
    21.                 }
    22.                 $i++;
    23.                
    24.  
    25.                 //$validation_class = $field['validation'] != 'none' ? $field['validation'] : '';
    26.  
    27.                 // ADD THE VALUE IF IT'S SET
    28.                 if ( !empty( $_POST[$id] ) ) $value = $_POST[$id];
    29.  
    30.                 // PERFORM THE VALUE VALIDATION
    31.                 if ( $field['validation'] != 'none' && isset( $_POST[$id] ) ) {
    32.                     $validation_class .= ' '.$this->validate_field( $field , $id , $value );
    33.                 }
    34.  
    35.                 echo '<p class="'.$field['width'].' '.$validation_class.' zn_form_field zn_'.$field['type'].'">';
    36.                     //$this->$field['type']( $field , $id , $value );
    37.                     call_user_func(array($this,$field['type']), $field , $id , $value); //** This fixes incompatibility with PHP 7.0.3
    38.                 echo '</p>';
    39.  
    40.             }
    41.         }
    42.  
    43.     }
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Посмотри если тут нормальная кодировка, может из базы что-то не то приходит