За последние 24 часа нас посетили 36233 программиста и 1718 роботов. Сейчас ищут 729 программистов ...

Проблема с кодировкой в ответе api, возвращает знаки вопроса

Тема в разделе "PHP для новичков", создана пользователем servitpol, 12 дек 2016.

  1. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Добрый день! Помогите разобраться с кодировкой пжлста. Отправляю запрос к сервису mainlink используя библиотеку nusoap. Ответ содержит массив с кучей инфы среди которой есть ссылки. Если ссылка вида http://ссылка.рф/page4 то ответ выглядит как http://??????.??/page4.

    Тестирую с localhosta, apache2.2, php5.2

    В сервисе mainlinka говорят что api работает в кодировке Unicode.

    Что сделано:
    Файл со скриптом сохранен в кодировке utf-8 без bom.
    Заголовок вида:
    HTML:
    1. <html lang="ru">
    2.   <head>
    3.     <meta charset="utf-8">
    4. ...
    В .htaccess:
    Код (Text):
    1. AddDefaultCharset UTF-8
    Ответ api выглядит так:
    Код (Text):
    1. HTTP/1.1 200 OK
    2. Content-Type: text/xml; charset=utf-8
    3. Content-Length: length
    4.  
    5. <?xml version="1.0" encoding="utf-8"?>
    6. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    7.   <soap:Body>
    8.     <LinksGetResponse xmlns="http://api.mainlink.ru/">
    9.       <LinksGetResult>
    10.         <Link>
    11.           <Id>int</Id>
    12.           <Anchor>string</Anchor>
    13.           <Comment>string</Comment>
    14.           <Expired>dateTime</Expired>
    15.           <Created>dateTime</Created>
    16.           <LastProlong>dateTime</LastProlong>
    17.           <Project>int</Project>
    18.           <Page>int</Page>
    19.           <Cy>int</Cy>
    20.           <Pr>int</Pr>
    21.           <YaCa>boolean</YaCa>
    22.           <OldCy>int</OldCy>
    23.           <OldPr>int</OldPr>
    24.           <Cost>double</Cost>
    25.           <Currency>Usd or Rur</Currency>
    26.           <Site>int</Site>
    27.           <PageSite>long</PageSite>
    28.           <PageSiteUri>string</PageSiteUri>
    29.           <Type>int</Type>
    30.           <Status>Unknown or Placed or Unmoderated or Archived or Wait or Sleep</Status>
    31.           <Indexed>int</Indexed>
    32.           <IndexedDate>string</IndexedDate>
    33.           <PageLevel>int</PageLevel>
    34.         </Link>
    35.       </LinksGetResult>
    36.     </LinksGetResponse>
    37.   </soap:Body>
    38. </soap:Envelope>
    Пробовал уже методом тыка перебирать кодировку используя iconv, т.е.:
    PHP:
    1. $url = $value['PageSiteUri'];
    2. $url = iconv("UTF-8", "ASCII", $url);
    Поиск в гугл и на форуме результата не дал, все найденные варианты среди большинства ответов "а ты гуглить не пробовал?" - не дали результата.
     
  2. Slavka

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

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    начнем с простого
    echo "привет";
    выдает по русски ? - надо понять на каком этапе русишу конец настает
    если же вопросами - смотри кодировку файла ( не кодировку текста а файла)

    в notepad++ должно быть так - кодировки -> кодировка в utf ( без BOM)
     
  3. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    echo 'Привет';
    и все остальное, кроме ответа api пишет без знаков вопроса...
     
  4. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    В библиотеке nusoap, в файле nusoap.php заменил 3 строки var $decode_utf8 = true; на var $decode_utf8 = false; ---- помогло!!