Tekcry
@Tekcry

Как разобраться с кодировкой php?

Приветствую!

Подскажите, пожалуйста, каким образом можно исправить кодировку получаемого текста?
По запросу
$content = file_get_contents('http://vk.com/foaf.php?id=1');

мне нужна строчка из <foaf:name></foaf:name>
Сам код выглядит
так:
<?
$content = file_get_contents('http://vk.com/foaf.php?id=1');
preg_match_all('#<foaf:name>(.+?)</foaf:name>#is', $content, $arr);
print_r($arr[1]);
?>

или
так:
<?
$content = file_get_contents('http://vk.com/foaf.php?id=529113');
$pos = strpos($content, '<foaf:name>');
$content = substr($content, $pos);
$pos = strpos($content, '</foaf:name>');
$content = substr($content, 0, $pos);
$content = str_replace('текст который нужно вырезать','', $content);
//$content = iconv("utf-8","windows-1251",$content); //Смена кодировки
print $content;
?>


Но на выходе я получаю знаки вопроса вместо кириллицы. Латиница же отображается как следует.
Не могу понять, причину. Вернее понятно, что проблема в кодировке. Но решить этот вопрос не удается.

Что пробовал:
Менял кодировку с utf-8 на windows-1251. Прописывал в исходном файле
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">.
, указывал в коде
<?header("Content-type:text/html; charset=windows-1251");?>
. Менял кодировку самого файла. В коде пробовал менять кодировку возможностями самого php
$content1 = iconv("utf-8","windows-1251",$content); //Смена кодировки

Создавал .htacces. В нем писал AddDefaultCharset windows-1251 и PHP_VALUE default_charset windows-1251

Но результат один, несчастные знаки ������ �������...
  • Вопрос задан
  • 464 просмотра
Решения вопроса 1
Eridani
@Eridani
Мимо проходил
$content = iconv("windows-1251", "utf-8",$content); //Смена кодировки

string iconv ( string in_charset, string out_charset, string str )

Производит преобразование кодировки символов строки str из начальной кодировки in_charset в конечную out_charset. Возвращает строку в новой кодировке, или FALSE в случае ошибки.


1ый параметр - ИЗ КАКОЙ КОДИРОВКИ
2ой - В КАКУЮ
Вы пытаетесь из ответа, который на win-1251 вытащить УТФ и преобразовать в win1251, иными словами, перепутали местами кодировки, из какого в какой
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
preg_match_all('#<foaf:name>(.+?)</foaf:name>#isu', $content, $arr);

Или, если через позиции
$pos = mb_strpos($content, '<foaf:name>');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы