http://bolgaria.top/kontakty/ - русская http://bolgaria.top/cont/ - англ 2 формы обратной связи: русская форма генерирует html с крякозябрами(открыть хром тулс на поле имя или любой другом русском поле" английская работает нормально. Плагин не мой, но не могу сообразить в какую сторону копать, чтобы исправить. На хостинге отключал привязку к кодировке, не помогло. Тоесть оно генерирует html согласно введеных в неё данных, данные вводятся на русском, из за этого форма не работает как нужно. PHP: <div class="zn_contact_form_container contactForm <?php echo $this->data['uid']; ?>"> <?php echo $title; ?> <?php if (!empty($description)) { ?> <div class="zn_description"><?php echo wpautop($description); ?></div> <?php } ?> <?php if ( $fields ) { echo '<form action="'.esc_url( get_permalink( zn_get_the_id() ) ).'" method="post" class="zn_contact_form row" >'; if ( $captcha ) { $fields[] = array( 'name' => 'zn_captcha' , 'type' => 'captcha' , 'validation' => 'captcha' , 'width' => 'col-sm-12' ); } $fields[] = array( 'name' => 'zn_pb_form_submit_'.self::$form_id ,'validation' => 'none', 'type' => 'hidden', 'width' => 'col-sm-12' ); $this->form_fields = $fields; // PRINT OUT THE FORM FIELDS echo $this->create_form_elements(); echo '<div class="col-sm-12">'; if ( $this->submit && $this->form_send() ){ $response = $sent_message; } elseif( isset( $_POST['zn_pb_form_submit_'.self::$form_id] ) ){ $response = __( 'There was a problem submiting your message. Please try again.', 'zn_framework' ); } echo '<div class="zn_contact_ajax_response titleColor" id="zn_form_id'.self::$form_id.'" >'.$response.'</div>'; echo' <span class="zn_submit_container"><button class="zn_contact_submit btn '.$button_style.'" type="submit">'.$submit_label.'</button></span></div>'; if ($redirect_to_url && !empty($redirect_url)){ echo '<input type="hidden" class="zn_form_field_redirect_url" value="'.esc_attr($redirect_url).'"/>'; } echo '</form>'; } ?> </div> <?php } function create_form_elements() { // THIS WILL BE INCREMENTED IF THE GENERATED ID IS NOT OK $i = 0; foreach( $this->form_fields as $key => $field ) { if( isset($field['type']) && method_exists($this, $field['type'])) { $value = $validation_class = ''; //** For output element, set its value to its name if( $field['type'] == 'output' ) { $value = $field['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++; //$validation_class = $field['validation'] != 'none' ? $field['validation'] : ''; // ADD THE VALUE IF IT'S SET if ( !empty( $_POST[$id] ) ) $value = $_POST[$id]; // PERFORM THE VALUE VALIDATION if ( $field['validation'] != 'none' && isset( $_POST[$id] ) ) { $validation_class .= ' '.$this->validate_field( $field , $id , $value ); } echo '<p class="'.$field['width'].' '.$validation_class.' zn_form_field zn_'.$field['type'].'">'; //$this->$field['type']( $field , $id , $value ); call_user_func(array($this,$field['type']), $field , $id , $value); //** This fixes incompatibility with PHP 7.0.3 echo '</p>'; } } } /* WILL OUTPUT A TEXT FIELD */ function text( $field , $id , $value ) { 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'].'" />'; }
Вот тут собирается текстовое поле, сверху как оно генерируется. PHP: /* WILL OUTPUT A TEXT FIELD */ function select( $field , $id , $value ) { $select_options = explode(',',$field['select_option']); if( is_array($select_options) ) { echo '<select name="'.$id.'" id="'.$id.'" class="zn_form_input zn_validate_'.$field['validation'].'">'; //if ( !empty( $field['name'] ) ) { echo '<option value="">'.$field['name'].'</option>'; } foreach ($select_options as $key => $value) { $options = explode( ':',$value ); if ( is_array($options) ) { $select_key = trim($options[0]); $select_value = trim($options[1]); $selected = $select_key == $value ? 'selected="selected"' : ''; echo '<option value="'.esc_attr($select_key).'" '.$selected.'>'.$select_value.'</option>'; } } echo '</select>'; } }
Дело в том, что почту оно отправляет, но только если дать имена все полям английскими символами. http://bolgaria.top/cont/ - вот тут работает как надо. http://bolgaria.top/kontakty/ - а вот тут оно не может задать поле с имененем "имя" - хтмл получается следующим - zn_form_field_�_����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): function create_form_elements() { // THIS WILL BE INCREMENTED IF THE GENERATED ID IS NOT OK $i = 0; foreach( $this->form_fields as $key => $field ) { if( isset($field['type']) && method_exists($this, $field['type'])) { $value = $validation_class = ''; //** For output element, set its value to its name if( $field['type'] == 'output' ) { $value = $field['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++; //$validation_class = $field['validation'] != 'none' ? $field['validation'] : ''; // ADD THE VALUE IF IT'S SET if ( !empty( $_POST[$id] ) ) $value = $_POST[$id]; // PERFORM THE VALUE VALIDATION if ( $field['validation'] != 'none' && isset( $_POST[$id] ) ) { $validation_class .= ' '.$this->validate_field( $field , $id , $value ); } echo '<p class="'.$field['width'].' '.$validation_class.' zn_form_field zn_'.$field['type'].'">'; //$this->$field['type']( $field , $id , $value ); call_user_func(array($this,$field['type']), $field , $id , $value); //** This fixes incompatibility with PHP 7.0.3 echo '</p>'; } } }