|
|
|
| Получаю контент с помощью file_get_contents? а там такая радость:
div class="ad-region">Подольский р-н</div>
<h2>Студио, ст.м. «Контрактовая площадь»</h2>
Что посоветуете для нормального отображения кирилицы? | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 12:57)
| | По названию темы - используйте грабберы.
Как перевести - вот | |
|
|
|
|
|
|
|
для: lElectroHardl
(21.08.2010 в 13:05)
| | как перевести по ссылке - там вообще-то функция javascript | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 12:57)
| |
iconv("UTF-8","CP1251","<div class=\"ad-region\">Подольский р-н</div>
<h2>Студио, ст.м. «Контрактовая площадь»</h2>");
|
| |
|
|
|
|
|
|
|
для: Gubichev
(21.08.2010 в 13:10)
| |
<?php
$content = ' <div class="ad-desc">Квартиры » Аренда долгосрочно » Киев » Подольский р-н</p>';
iconv( "UTF-8", "CP1251" , $content);// Производит преобразование кодировки символов строки $content из "UTF-8" в "CP1251"
preg_match_all("/(?<=\"ad-desc\">).*(?=<\/p>)/", $content, $text);
echo "<pre>";
print_r ($text);
echo "<pre>";
?>
|
такой код выводит в опере:
Array
(
[0] => Array
(
[0] => Квартиры » Аренда долгосрочно » Киев » Подольский р-н
)
)
Странно, Производит преобразование кодировки символов строки $content из "UTF-8" в "CP1251" , а отображаеться строка нормально только если в опере выбрать кодировку UTF-8.
А если автоматически, то то что в массиве. По-моему преобразование не срабатывае вообще, закоментировал строку - все тоже. ??? | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 13:40)
| | Ну изменили вы кодировку. А присвоить перекодированную строку переменной content не надо?
<?php
$content = ' <div class="ad-desc">Квартиры » Аренда долгосрочно » Киев » Подольский р-н</p>';
$content=iconv( "UTF-8", "CP1251" , $content);// Производит преобразование кодировки символов строки $content из "UTF-8" в "CP1251"
preg_match_all("/(?<=\"ad-desc\">).*(?=<\/p>)/", $content, $text);
echo "<pre>";
print_r ($text);
echo "<pre>";
?>
|
| |
|
|
|
|
|
|
|
для: Gubichev
(21.08.2010 в 13:48)
| | да, верно так работает, спасибо. | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 13:40)
| | посмотрите что за кодировка на сайте, из которого вы этот контент дергаете | |
|
|
|
|
|
|
|
для: psychomc
(21.08.2010 в 13:49)
| | там похоже UTF_8, так что угадали, а что я бы мог зная url средствами php узнавать кодировку сайта и ,в зависимости от нее, преобразовывать контент в нужную мне кодировку? | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 14:02)
| | Могли бы | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 14:02)
| | Поймете как пользоваться? Если че - писал я, для себя.
<?php
function arrayChoose($array, $key){
return $array[$key];
}
function postHelper($array){
$str = array();
foreach($array as $k => $v) $str[] = $k.'='.urlencode($v);
return implode('&', $str);
}
function Sockets($url, $port = 80){
if(!function_exists('curl_init')){
if(!($init = fsockopen(arrayChoose(parse_url($url), 'host'), $port))) return FALSE;
return new Socket_helper($init, $url);
}else{
if(!($init = curl_init($url))) return FALSE;
return new CURL_helper($init);
}
}
class CURL_helper {
private $resource;
public $getHeaders = FALSE,
$inputEncoding = 'windows-1251',
$outputEncoding = 'windows-1251',
$autoEncoding = TRUE,
$userAgent = 'Mozilla/5.0',
$method = 'GET',
$postFields = '';
public function __construct($init){
$this->resource = $init;
}
public function __destruct(){
curl_close($this->resource);
}
public function getResponse(){
curl_setopt($this->resource, CURLOPT_HEADER, $this->getHeaders || $this->autoEncoding);
curl_setopt($this->resource, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($this->resource, CURLOPT_USERAGENT, $this->userAgent);
curl_setopt($this->resource, CURLOPT_CUSTOMREQUEST, $this->method);
if(strtoupper($this->method) == 'POST'){
curl_setopt($this->resource, CURLOPT_POST, TRUE);
curl_setopt($this->resource, CURLOPT_POSTFIELDS, $this->postFields);
}
$response = curl_exec($this->resource);
if(!$this->getHeaders && !$this->autoEncoding) return $response;
$response = explode("\n", $response);
$num = 0;
foreach($response as $num => $string) if($string == "\r" || $string == '') break;
$headers = implode("\n", array_slice($response, 0, $num));
$body = implode("\n", array_slice($response, $num));
unset($response);
if($this->autoEncoding){
preg_match('|charset[ ]?\=[ ]?(.+)|', $headers, $charset);
if($charset) $this->inputEncoding = trim($charset[1]);
if(strtolower($this->inputEncoding) != strtolower($this->outputEncoding)) $body = iconv($this->inputEncoding, $this->outputEncoding, $body);
}
return $this->getHeaders ? array($headers, $body) : $body;
}
public function inFile($fileName, $chunkSize = 0x1000){
curl_setopt($this->resource, CURLOPT_HEADER, $this->getHeaders);
curl_setopt($this->resource, CURLOPT_USERAGENT, $this->userAgent);
if(!($fp = fopen($fileName, 'w+'))) return FALSE;
curl_setopt($this->resource, CURLOPT_FILE, $fp);
@curl_setopt($this->resource, CURLOPT_BUFFERSIZE, $chunkSize);
if(!($isOk = curl_exec($this->resource))) return FALSE;
if(!$this->getHeaders){
fclose($fp);
return $isOk;
}
$header = '';
$mark = FALSE;
$fpW = fopen($fileName.'.copy', 'w');
fseek($fp, 0);
while(!feof($fp)){
if($mark) fwrite($fpW, fread($fp, 0x40000));
else{
$str = fgets($fp);
if(trim($str) == '') $mark = TRUE;
else $header .= $str;
}
}
fclose($fp);
fclose($fpW);
unlink($fileName);
rename($fileName.'.copy', $fileName);
return $header;
}
}
class Socket_helper {
private $resource,
$url,
$headersSended = FALSE;
public $getHeaders = FALSE,
$inputEncoding = 'windows-1251',
$outputEncoding = 'windows-1251',
$autoEncoding = TRUE,
$responsePiece = '',
$userAgent = 'Mozilla/5.0',
$method = 'GET',
$postFields = '';
public function __construct($init, $url){
$this->resource = $init;
$this->url = $url;
}
public function __destruct(){
fclose($this->resource);
}
public function getResponse(){
$url = parse_url($this->url);
$headers = $this->method.' '.(strlen($url['path']) ? $url['path'] : '/').(isset($url['query']) ? '?'.$url['query'] : '').' HTTP/1.1'."\r\n";
$headers .= 'Host: '.$url['host']."\r\n";
$headers .= 'User-Agent: '.$this->userAgent."\r\n";
$headers .= 'Content-Type: application/x-www-form-urlencoded'."\r\n";
$headers .= strtoupper($this->method) == 'POST' ? 'Content-Length: '.strlen($this->postFields)."\r\n" : '';
$headers .= 'Connection: close'."\r\n";
$headers .= "\r\n";
if(strtoupper($this->method) == 'POST') $headers .= $this->postFields;
fwrite($this->resource, $headers);
$header = '';
$body = '';
$mark = FALSE;
while(!feof($this->resource)){
if(!$mark){
$str = fgets($this->resource);
if(trim($str) == '') $mark = TRUE;
else if($this->getHeaders || $this->autoEncoding) $header .= $str;
}else $body .= fread($this->resource, 2048);
}
if(!$this->getHeaders && !$this->autoEncoding) return $body;
if($this->autoEncoding){
preg_match('|charset[ ]?\=[ ]?(.+)|', $header, $charset);
if($charset) $this->inputEncoding = trim($charset[1]);
if(strtolower($this->inputEncoding) != strtolower($this->outputEncoding)) $body = iconv($this->inputEncoding, $this->outputEncoding, $body);
}
return $this->getHeaders ? array($header, $body) : $body;
}
public function iterate($chunkSize = 0x800){
if($this->headersSended){
if(feof($this->resource)) return FALSE;
$this->responsePiece = fread($this->resource, $chunkSize);
return TRUE;
}else{
$url = parse_url($this->url);
$headers = 'GET '.(strlen($url['path']) ? $url['path'] : '/').(isset($url['query']) ? '?'.$url['query'] : '').' HTTP/1.1'."\r\n";
$headers .= 'Host: '.$url['host']."\r\n";
$headers .= "\r\n";
fwrite($this->resource, $headers);
$this->headersSended = TRUE;
if($this->getHeaders) return TRUE;
while(!feof($this->resource)){
if(trim(fgets($this->resource)) == '') return TRUE;
}
}
}
public function inFile($fileName, $chunkSize = 0x1000){
$url = parse_url($this->url);
$headers = 'GET '.(strlen($url['path']) ? $url['path'] : '/').(isset($url['query']) ? '?'.$url['query'] : '').' HTTP/1.1'."\r\n";
$headers .= 'Host: '.$url['host']."\r\n";
$headers .= 'User-Agent: '.$this->userAgent."\r\n";
$headers .= "\r\n";
fwrite($this->resource, $headers);
if(!($fp = fopen($fileName, 'w'))) return FALSE;
$mark = FALSE;
$header = '';
while(!feof($this->resource)){
if($mark) fwrite($fp, fread($this->resource, $chunkSize));
else{
$str = fgets($this->resource);
if(trim($str) == '') $mark = TRUE;
else if($this->getHeaders) $header .= $str;
}
}
fclose($fp);
return $this->getHeaders ? $header : TRUE;
}
}
|
| |
|
|
|
|
|
|
|
для: nikita2206
(21.08.2010 в 14:34)
| | наверно крутая штука, буду разбирать, если что спрошу? | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 14:41)
| |
<?php
$sock = Sockets($url);
$page = $sock->getResponse();
unset($sock);
|
Вот так можно скачать содержимое в перменную, кодировка определится сама и конвертнится в кодировку, установленную в $sock->outputEncoding (по умолчанию - win-1251). | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 14:02)
| | Назовите url сайта с которого вы берете контент. | |
|
|
|
|
|
|
|
для: sim5
(21.08.2010 в 14:40)
| | http://fn.ua/ | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 14:42)
| | <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
А еще, в заголовках можно посмотреть, но не передает заголовке этот сайт кодировку. | |
|
|
|
|
|
|
|
для: sim5
(21.08.2010 в 14:49)
| | Мне кажется, сайт должен в первую очередь именно в заголовке передавать, а про мету вообще могли бы уже забыть. | |
|
|
|
|
|
|
|
для: nikita2206
(21.08.2010 в 14:52)
| | Ну кажется, но не всегда это так. Вот таким методом можно получить кодировку, если она передается заголовком:
get_headers(url), и получим Content-Type: text/html .... вот тут кодровка, но не у всех.
Либо прочитать метатеги:
get_meta_tags(url), но опять таки не всегда все заголовки читаются. | |
|
|
|
|
|
|
|
для: starpom
(21.08.2010 в 14:02)
| | можно например зайти на сайт и в браузере посмотреть если сложно с помощью php | |
|
|
|