За последние 24 часа нас посетили 17512 программистов и 990 роботов. Сейчас ищут 477 программистов ...

При отправке рускоязычных слов JS получает кракозябры как исправить?

Тема в разделе "PHP для новичков", создана пользователем Katy93, 4 май 2022.

Метки:
  1. Katy93

    Katy93 Активный пользователь

    С нами с:
    3 янв 2019
    Сообщения:
    69
    Симпатии:
    0
    Делаю отправку имени с помощью FormData, php скрипт получает нормальное “имя”, проверила с помощью file_put_contents, но когда мне требуется вернуть имя обратно в js, выходит почему-то кракозябры. Как исправить?


    HTML:
    1. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
    2.  
    3. </head>
    4. <form name="person">
    5.   <input name="name" value="Имя">
    6. </form>
    7.  
    8.   // создать объект для формы
    9.   var formData = new FormData(document.forms.person);
    10.  
    11.   var name = document.forms.person.name.value;
    12.  
    13.  
    14.   // добавить к пересылке ещё пару ключ - значение
    15.   formData.append("name", "Имя");
    16.  
    17.   // отослать
    18.   var xhr = new XMLHttpRequest();
    19.   xhr.open("POST", "/handler.php");
    20.   xhr.onload=function()
    21.   {
    22.  
    23.     console.log(xhr.responseText); //Кракозябры
    24.   }
    25.  
    26.   xhr.send(formData);
    27.  
    28.  
    29.  
    30. </body>
    31.  
    Код php
    PHP:
    1. <?php
    2. $name = $_POST["name"];
    3. file_put_contents("name.txt",$name);
    4. echo htmlspecialchars("{\"name\":$name}");
    5. ?>
     
  2. Katy93

    Katy93 Активный пользователь

    С нами с:
    3 янв 2019
    Сообщения:
    69
    Симпатии:
    0
    Проблема решена, нужно было сделать следующее:
    1.Установить заголовок и метатег в главном файле. Вот так:
    HTML:
    1.  <?php
    2.  header("Content-Type: text/html; charset=utf-8");
    3. ?>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    5.  
    2. Изменить кодировку на utf-8 в index.php и handler.php.
    3. Добавить в handler.php header.
    PHP:
    1. <?php
    2.   header("Content-Type: text/html; charset=utf-8");
    3. $name = $_POST["name"];
    4. file_put_contents("name.txt",$name);
    5. echo htmlspecialchars("{\"name\":\"{$name}\"}", ENT_NOQUOTES,"UTF-8");
    6. ?>
    После этих действий заработало.