php curl, проблема с символами содержимого XML - PullRequest
0 голосов
/ 16 сентября 2010

Здравствуйте, я только начинаю разрабатывать php. Я хочу получить содержимое xml с другого сайта, но когда я получаю его таким образом

$options = array(
  CURLOPT_RETURNTRANSFER => true,     // return web page
  CURLOPT_HEADER         => false,    // don't return headers
  CURLOPT_ENCODING       => "UTF-8",       // handle compressed
 CURLOPT_USERAGENT      => "spider", // who am i
 );
 $ch      = curl_init("http://wxxx.xml");
 curl_setopt_array( $ch, $options );
 $file = curl_exec( $ch );
 curl_close( $ch );

, он возвращает поврежденные символы, и я могу заставить его выглядеть нормальнокогда я изменяю заголовок страницы на UTF-8, но проблема в том, что я не могу вставить эти переменные в базу данных, они тоже повреждены, как я могу это исправить?спасибо за любой ответ.

Ответы [ 4 ]

0 голосов
/ 17 сентября 2010

Здравствуйте еще раз! Спасибо за ответы, они действительно помогли мне найти проблему, и особая благодарность ngroot, потому что я застрял в размышлениях о curl, но проблема была в базе данных, когда я попробовал первые 2 ответа, я не получил результата, и когда япроверил базу данных. Я увидел, что я сохранил заголовки XML-файла как VARCHAR, а турецкий UTF-8 - как кодировку, чем я попробовал Unicode UTF-8, и увидел, что переменные базы данных стали более читабельнымиеще раз спасибо за помощь.

0 голосов
/ 16 сентября 2010

Из документации PHP curl:

CURLOPT_ENCODING: Содержимое заголовка "Accept-Encoding:".Это позволяет расшифровать ответ.Поддерживаемые кодировки: «identity», «deflate» и «gzip».Если задана пустая строка "", отправляется заголовок, содержащий все поддерживаемые типы кодирования.

Эта опция не контролирует, как curl будет интерпретировать ответные байты, а заставляет ее принятьконтент, который передается в виде сжатого потока, например, gzip.

Ваш скрипт получит контент, вы можете преобразовать его кодировку, используя PHP mb_string / icnov функцииОднако убедитесь, что вы правильно настроили параметры сортировки базы данных и соединения.

0 голосов
/ 16 сентября 2010

Если символы в порядке, когда вы изменяете заголовок страницы, чтобы указать, что она закодирована в UTF-8, они не повреждены;вы обрабатываете символьные данные, которые закодированы в одном формате (UTF-8), как если бы они были закодированы в другом.

Что вы должны проверить:

  • Убедитесь, чтоИсходный документ XML, по сути, закодирован в UTF-8, поскольку это то, что вы указываете в опциях curl.

  • Узнайте, какая кодировка используется вашей базой данных.

Если вам нужно иметь возможность хранить символы Unicode в вашей базе данных, вы можете изменить кодировку символов на UTF-8.Кроме того, вы можете конвертировать из исходного документа, используя utf8_decode() (если в базе данных хранятся символы ISO-8859-1) или mb_convert_encoding().Однако если символы в исходном документе не могут быть закодированы в системе, используемой базой данных, вы потеряете информацию.

0 голосов
/ 16 сентября 2010

Параметр CURLOPT_ENCODING предназначен для указания значения заголовка Accept-Encoding , а не для принятой кодировки символов.Попробуйте Accept-Charset вместо:

$options = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER         => false,
    CURLOPT_USERAGENT      => "spider",
);
$header = array('Accept-Charset: UTF-8');
$ch     = curl_init("http://wxxx.xml");
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header)
$file = curl_exec($ch);
curl_close($ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...