substr режит текст в результате на почту приходит текст с ромбиками (((

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "PHP & JavaScript & AJAX & JQUERY & HTML & FLASH", создана пользователем Julia1991, 10 окт 2018.

  1. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    substr режит текст в результате на почту приходит текст с ромбиками http://joxi.ru/DmBydWnfwQ5qgr
    Вот код формы

    PHP:
    if ( isset( $_POST['sendMail'] ) ) {
        
    $name    substr$_POST['name'], 064 );
        
    $tel substr$_POST['tel'], 064 );
        
    $email     substr$_POST['email'], 064 );
        
    $select1    substr$_POST['select1'], 064 );
        
    $number substr$_POST['number'], 064 );   
        
    $message substr$_POST['message'], 0100000 );

    if(
    $_FILES)
    {
        
    $filepath = array();
        
    $filename = array();
        
    $file2 = array();
        
    $i 0;
            foreach (
    $_FILES["file"]["error"] as $key => $error) {
                if (
    $error == UPLOAD_ERR_OK) {
                    
    $filename[$i][0] = $_FILES["file"]["tmp_name"][$key];
                    
    $filename[$i][1] = $_FILES["file"]["name"][$key];
                    
    $i++;
                }
            }
        }

        
        
    $body "Имя:\r\n".$name."\r\n\r\n";
        
    $body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
        
    //$body .= "E-mail:\r\n".$email."\r\n\r\n";
        
    $body .= "Выбор из списка:\r\n".$select1."\r\n\r\n";
        
    $body .= "Номер квартиры:\r\n".$number."\r\n\r\n";
        
    $body .= "Текст предложения\r\n".$message;
        
    send_mail($to$body$email$filename);
    }

    function 
    send_mail($to$body$email$filename$select1$message)
    {
        
    $subject ' ';
        
    $boundary "--".md5(uniqid(time())); // генерируем разделитель
        
    $headers "From: ".$email."\r\n";     
        
    $headers .= "MIME-Version: 1.0\r\n";
        
    $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
        
    $multipart "--".$boundary."\r\n";
        
    $multipart .= "Content-type: text/plain; charset=\"UTF-8\"\r\n";
        
    $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

        
    $body $body."\r\n\r\n";
     
        
    $multipart .= $body;
        foreach (
    $filename as $key => $value) {
            
    $fp fopen($value[0], "r");
            
    $content fread($fpfilesize($value[0]));
            
    fclose($fp);
            
    $file .= "--".$boundary."\r\n";
            
    $file .= "Content-Type: application/octet-stream\r\n";
            
    $file .= "Content-Transfer-Encoding: base64\r\n";
            
    $file .= "Content-Disposition: attachment; filename=\"".$value[1]."\"\r\n\r\n";
            
    $file .= chunk_split(base64_encode($content))."\r\n";
        }
        
    $multipart .= $file."--".$boundary."--\r\n";
        
    mail($to$subject$multipart$headers);
    }
     
  2. Фанат

    Фанат oncle terrible Команда форума

    Сообщения:
    39.946
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    mb_substr()
     
  3. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    Этот вариант не помогает
     
  4. Фанат

    Фанат oncle terrible Команда форума

    Сообщения:
    39.946
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    помогает
     
  5. ksnk

    ksnk прохожий

    Сообщения:
    1.060
    Address:
    Sankt-Peterburg, Russia
    Country:
    Location on Map:
    mb_substr поможет, если указывать кодировку. Хотя в этом случае substr испортил бы последний символ, или пару символов. Если весь текст приходит в ромбиках - значит текст изначально в другой кодировке.
    Смотри на кодировки документа, отсылаемого текста...
     
  6. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    Документ в формате utf-8. Не весь текст в ромбиках, а только последний символ.
    mb_substr добавляла и кодировку тоже вот так
    $message = mb_substr( $_POST['message'], 0, 100000, 'UTF-8' ); для $message
    но этот вариант не срабатывает
     
  7. Andkorol

    Andkorol Новичок

    Сообщения:
    914
    Ваш город:
    Украина, Запорожье
    Address:
    Zaporizhia, Ukraine
    Country:
    Location on Map:
    В смысле – на почту сообщение приходит в таком же виде, как и после substr?
    А если не отправлять на почту – а просто сразу же вывести сообщение после mb_substr в браузер?
    А если отправлять на почту сообщение – но без обрезки?
    В таком виде на почту приходит любой текст, любой длины?
    Для ввода текста сообщения используется обычная текстовая область (<textarea>) – или WYSIWYG-редактор?
     
  8. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    Вот форма

    PHP:
    <form action="#" method="post" id="sendform">
            <
    h3>Форма</h3>
                <
    input name="name" value="" size="40" type="text" placeholder="Имя"/><br/>
                <
    input name="tel" value="" size="40" class="required" type="tel" placeholder="Телефон*"/><br/>
                 <
    input name="email" value="mail@gmail.com" size="40" class="required" type="email" placeholder="E-mail"/><br/>
                <
    textarea name="message" cols="40" rows="10" placeholder="Сообщение"/> </textarea><br/>
           <
    select  name="select">
           <
    option disabled selected>Выберите город</option>
           <
    option value="Харьков">Харьков</option>
           <
    option value="Киев">Киев</option>
           <
    option value="Одесса">Одесса</option>
           </
    select><br/>
           <
    input value="Отправить" name="sendMail" type="submit" />
    </
    form>
     
  9. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
  10. Andkorol

    Andkorol Новичок

    Сообщения:
    914
    Ваш город:
    Украина, Запорожье
    Address:
    Zaporizhia, Ukraine
    Country:
    Location on Map:
    Вы остальные вопросы игнорируете – или просто не понимаете?
     
  11. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    В смысле – на почту сообщение приходит в таком же виде, как и после substr? - Да
    А если не отправлять на почту – а просто сразу же вывести сообщение после mb_substr в браузер? - Не смотрела
    А если отправлять на почту сообщение – но без обрезки? -Тоже самое
    В таком виде на почту приходит любой текст, любой длины? - Если большой текст
    Для ввода текста сообщения используется обычная текстовая область (<textarea>) – или WYSIWYG-редактор? - <textarea> использую
     
  12. Andkorol

    Andkorol Новичок

    Сообщения:
    914
    Ваш город:
    Украина, Запорожье
    Address:
    Zaporizhia, Ukraine
    Country:
    Location on Map:
    Это стоит проверить.
    Тут проблема в том, что тексты на ваших скринах и близко не достигают лимита в 100К, указанного для substr|mb_substr.
    Так что вполне возможно, что никакой обрезки и нет вовсе – и «искать ноги» нужно совсем в другом месте.
     
  13. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    В браузер нормально приходит
     
  14. Тугай

    Тугай Новичок

    Сообщения:
    242
    Ваш город:
    Dnipro, Ukraine
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    Скорей всего substr тут не причем, а вставляемый текст не utf-8.
    как вариант:
    Код:
    $message = substr( iconv('utf-8', 'utf-8', $_POST['message']), 0, 100000 );
    Это почистит строку от не utf-8 символов.
     
  15. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
  16. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    Это код
    PHP:
    <?php

    $to 
    'juliaradionova1991@gmail.com';

    if ( isset( 
    $_POST['sendMail'] ) ) {
    $name substr$_POST['name'], 064 );
    $tel substr$_POST['tel'], 064 );
    $email substr$_POST['email'], 064 );
    $select substr$_POST['select'], 064 );
    $message substriconv('utf-8''utf-8'$_POST['message']), 0100000 );

    $body "Имя:\r\n".$name."\r\n\r\n";
    $body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
    $body .= "E-mail:\r\n".$email."\r\n\r\n";
    $body .= "Выбор города:\r\n".$select."\r\n\r\n";
    $body .= "Сообщение:\r\n".$message;

    send_mail($to$body$email);

    }

    function 
    send_mail($to$body$email$filepath$filename)
    {
    $subject 'Форма';
    $boundary "--".md5(uniqid(time())); // генерируем разделитель
    $headers "From: ".$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
    $multipart "--".$boundary."\r\n";
    $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
    $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

    $body $body."\r\n\r\n";

    $multipart .= $body;

    $file '';
    if ( !empty( 
    $filepath ) ) {
    $fp fopen($filepath"r");
    if ( 
    $fp ) {
    $content fread($fpfilesize($filepath));
    fclose($fp);
    $file .= "--".$boundary."\r\n";
    $file .= "Content-Type: application/octet-stream\r\n";
    $file .= "Content-Transfer-Encoding: base64\r\n";
    $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $file .= chunk_split(base64_encode($content))."\r\n";
    }
    }
    $multipart .= $file."--".$boundary."--\r\n";
    mail($to$subject$multipart$headers);
    }
    ?>
     
  17. Тугай

    Тугай Новичок

    Сообщения:
    242
    Ваш город:
    Dnipro, Ukraine
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    Content-Transfer-Encoding: quoted-printable
    стоит такой заголовок, но само сообщение не кодируется php функцией quoted_printable_encode().

    $body = quoted_printable_encode($body)."\r\n\r\n";
     
    Julia1991 нравится это.
  18. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    Проблема решена, спасибо Вам большое!!!!!!
     
  19. Julia1991

    Julia1991 Новичок

    Сообщения:
    12
    Ваш город:
    Харьков, Kharkiv Oblast, Ukraine
    Address:
    Kharkiv, Ukraine
    Country:
    Location on Map:
    Если я добавила это
    PHP:
    $body quoted_printable_encode($body)."\r\n\r\n"
    то это убрать можно
    PHP:
    $body $body."\r\n\r\n";
    ?
     
  20. Тугай

    Тугай Новичок

    Сообщения:
    242
    Ваш город:
    Dnipro, Ukraine
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map: