[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с mb_internal_encoding(). Где включается?
HIDDENSY
Привет всем.

Подскажите как включить функцию mb_internal_encoding().

Тестирую скрипт найденный на просторах интернета, на хостинге работает без проблем, под денвером не взлетает.

Выводится ошибка:
Fatal error: Call to undefined function mb_internal_encoding()

Как победить или как включить в php данную функцию?



Спустя 1 час, 10 минут, 19 секунд (19.10.2009 - 23:28) twin написал(а):
Надо поставить библиотеку mb

Спустя 7 часов, 30 минут, 54 секунды (20.10.2009 - 06:59) HIDDENSY написал(а):
А где её скачать, как установить, как подключить. Облазил сайт денвера, все оттуда скачал, все установил, а дальше то как?

Вообще данная библиотека относится к php или апачу? Мало информации в сети на данную тему, подскажите знающие по теме.

Спустя 1 час, 10 минут, 33 секунды (20.10.2009 - 08:09) Michael написал(а):
Относится к PHP
Сам файл - php_mbstring.dll
Подключается в php.ini
Вот кусок оттуда

[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll
[PHP_MBSTRING]
extension=php_mbstring.dll

[PHP_CURL]
extension=php_curl.dll
[PHP_GD2]
extension=php_gd2.dll

С денвером не работал, а просто повторно запустил инсталяху php и
добавил расширения - сами скопировалить в подкаталог ext каталога
установки php

Спустя 3 минуты, 43 секунды (20.10.2009 - 08:13) HIDDENSY написал(а):
Цитата (Michael @ 20.10.2009 - 05:09)
Относится к PHP
Сам файл - php_mbstring.dll
Подключается в php.ini
Вот кусок оттуда

[PHP_MYSQL]
extension=php_mysql.dll
[PHP_MYSQLI]
extension=php_mysqli.dll
[PHP_MBSTRING]
extension=php_mbstring.dll

[PHP_CURL]
extension=php_curl.dll
[PHP_GD2]
extension=php_gd2.dll

С денвером не работал, а просто повторно запустил инсталяху php и
добавил расширения - сами скопировалить в подкаталог ext каталога
установки php

Спасибо, сразу нашел, включил и взлетело на денвере.

Спустя 1 день, 2 часа, 1 минута, 6 секунд (21.10.2009 - 10:14) HIDDENSY написал(а):
после подключения данной библиотеки возникли проблемы с $get запросами на русском языке. Кодировка Windows-1251 на сайте используется.
Запрос типа:
index.php?query=поиск (ссылка на странице)

index.php?query=%EF%EE%E8%F1%EA (результат из адресной строки браузера)

не возвращает переменную query.

запрос index.php?query=search
работает корректно.

Подскажите как быть и что делать, каковы возможные варианта решения данного вопроса и собственно почему так перестало работать?

Спустя 13 минут, 12 секунд (21.10.2009 - 10:27) glock18 написал(а):
переменные кодируются в утф8 в запросе. чтобы увидеть что-то, нужно конвертировать их в цп-1251. для этого используйте iconv или фунцию из набора mb_ (не помню называется, че-т с convert)

Спустя 40 минут, 36 секунд (21.10.2009 - 11:08) HIDDENSY написал(а):
Конвертнуть в адресную строку получается, а вот обратно использую тот же принцип нет. Возвращаются "кракозябры".

Спустя 6 минут, 14 секунд (21.10.2009 - 11:14) glock18 написал(а):
Код в студию

Спустя 5 минут, 32 секунды (21.10.2009 - 11:20) HIDDENSY написал(а):
строка запроса из браузера

/index.php?query=%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0

<?php
$query = $_GET["query"];
echo "Без обработки: ".$query."<br>";
$query1 = iconv("UTF-8", "Windows-1251", $_GET["query"]);
echo "UTF-8 -> Windows-1251: ".$query1."<br>";
$query2 = iconv("Windows-1251", "UTF-8", $_GET["query"]);
echo "Windows-1251 -> UTF-8: ".$query2."<br>";
?>

выводит:

Без обработки: B>20@8I5AB20
UTF-8 -> Windows-1251: B>20@8I5AB20
Windows-1251 -> UTF-8: B>20@8I5AB20

Спустя 7 минут, 4 секунды (21.10.2009 - 11:27) glock18 написал(а):
код запрашивается через ajax или это обычная страничка?

Спустя 1 минута, 50 секунд (21.10.2009 - 11:29) HIDDENSY написал(а):
обычная страничка.

Спустя 8 минут, 39 секунд (21.10.2009 - 11:37) HIDDENSY написал(а):
Самое интересное в том, что если библиотеку отключить и перезапустить PHP, то все становится нормально и скрипт поиска начинает работать корректно, но отключается скрипт ради которого подключалась библиотека. Прям засада страшная, 2-й день победить не могу.

Спустя 58 минут, 29 секунд (21.10.2009 - 12:36) glock18 написал(а):
какую кодировку выставлешь mb_internal_encoding'ом ?

Спустя 12 минут, 32 секунды (21.10.2009 - 12:48) HIDDENSY написал(а):
Цитата (glock18 @ 21.10.2009 - 09:36)
какую кодировку выставлешь mb_internal_encoding'ом ?

iso-8859-1

Это я класс мучаю из соседней ветки

Обращение к классу

PHP
//$paramss['content'] = $textpage; //page content
//set the length of keywords you like
    $paramss['min_word_length'] = 6;  //minimum length of single words
    $paramss['min_word_occur'] = 2;  //minimum occur of single words

    $paramss['min_2words_length'] = 3;  //minimum length of words for 2 word phrases
    $paramss['min_2words_phrase_length'] = 5; //minimum length of 2 word phrases
    $paramss['min_2words_phrase_occur'] = 2; //minimum occur of 2 words phrase

    $paramss['min_3words_length'] = 3;  //minimum length of words for 3 word phrases
    $paramss['min_3words_phrase_length'] = 5; //minimum length of 3 word phrases
    $paramss['min_3words_phrase_occur'] = 2; //minimum occur of 3 words phrase

    $keyword = new autokeyword($paramss,"iso-8859-1");
    $keywords = $keyword->get_keywords();

//echo $keyword->parse_words(); // Keywords из 1-го слова
//echo $keyword->parse_2words(); // Keywords из 2-х слов
//echo $keyword->parse_3words(); // Keywords из 3-х слов
//echo $keyword->get_keywords(); // Keywords все слова

Спустя 28 минут, 46 секунд (21.10.2009 - 13:17) glock18 написал(а):
HIDDENSY
ммм... а в чем тогда вопрос? у тебя сайт в windows-1251, внутренняя кодировка в iso, а база данных еще в utf. Что за огород из кодировок?

Спустя 6 минут, 26 секунд (21.10.2009 - 13:23) HIDDENSY написал(а):
Сайт без базы данных. Все на файлах txt, в них вся информация.
Кодировка используется на сайте windows-1251 и в файлах соответственно тоже.

Подключил я вышеупомянутый класс, потребовалась библиотека, запустил, отвалился поиск из за данного гласа.

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

В общем беда, помогите люди добрые, сами мы не местные, мануалы читали, книжки листали, код писали, не пашет эта дрянь.

Спустя 3 минуты, 23 секунды (21.10.2009 - 13:27) glock18 написал(а):
Цитата
у тебя сайт в windows-1251, внутренняя кодировка в iso


мануалы плохо листали, еще полистайте что там за функция mb_internal_encoding такая...

Спустя 1 час, 41 минута, 57 секунд (21.10.2009 - 15:09) twin написал(а):
Цитата
Либо класс нужно переписывать без применения этой гнусной библиотеки

надо переписывать без применения гнусной кодировки (windows-1251)

Спустя 49 минут, 35 секунд (21.10.2009 - 15:58) HIDDENSY написал(а):
Помогите это сделать. Я удалил все что относилось к библиотеки mb_ , скрипт перестал вообще что либо выдавать. В сети перерыл массу информации, но достойней варианта данной библиотеки не нашел, поэтому шибко надо её корректно запустить.

Продублирую класс в данной ветке, потому как считаю, что это лучшее из того что в сети в свободном доступе, но без напильника никак.
PHP
<?php

/******************************************************************
Projectname:   Automatic Keyword Generator
Version:       0.3
Author:        Ver Pangonilo <smp_AT_itsp.info>
Last modified: 26 July 2006
Copyright ©: 2006 Ver Pangonilo, All Rights Reserved

* GNU General Public License (Version 2, June 1991)
*
* This program is free software; you can redistribute
* it and/or modify it under the terms of the GNU
* General Public License as published by the Free
* Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will
* be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License
* for more details.

Description:
This class can generates automatically META Keywords for your
web pages based on the contents of your articles. This will
eliminate the tedious process of thinking what will be the best
keywords that suits your article. The basis of the keyword
generation is the number of iterations any word or phrase
occured within an article.

This automatic keyword generator will create single words,
two word phrase and three word phrases. Single words will be
filtered from a common words list.

Change Log:
===========
0.2 Ver Pangonilo - 22 July 2005
================================
Added user configurable parameters and commented codes
for easier end user understanding.

0.3 Vasilich  (vasilich_AT_grafin.kiev.ua) - 26 July 2006
=========================================================
Added encoding parameter to work with UTF texts, min number 
of the word/phrase occurrences, 

******************************************************************/

class autokeyword {

//declare variables
//the site contents
var $contents;
var 
$encoding;
//the generated keywords
var $keywords;
//minimum word length for inclusion into the single word
//metakeys
var $wordLengthMin;
var 
$wordOccuredMin;
//minimum word length for inclusion into the 2 word
//phrase metakeys
var $word2WordPhraseLengthMin;
var 
$phrase2WordLengthMinOccur;
//minimum word length for inclusion into the 3 word
//phrase metakeys
var $word3WordPhraseLengthMin;
//minimum phrase length for inclusion into the 2 word
//phrase metakeys
var $phrase2WordLengthMin;
var 
$phrase3WordLengthMinOccur;
//minimum phrase length for inclusion into the 3 word
//phrase metakeys
var $phrase3WordLengthMin;

function 
autokeyword($params$encoding)
{
//get parameters
$this->encoding $encoding;
mb_internal_encoding($encoding);
$this->contents $this->replace_chars($params['content']);

// single word
$this->wordLengthMin $params['min_word_length'];
$this->wordOccuredMin $params['min_word_occur'];

// 2 word phrase
$this->word2WordPhraseLengthMin $params['min_2words_length'];
$this->phrase2WordLengthMin $params['min_2words_phrase_length'];
$this->phrase2WordLengthMinOccur $params['min_2words_phrase_occur'];

// 3 word phrase
$this->word3WordPhraseLengthMin $params['min_3words_length'];
$this->phrase3WordLengthMin $params['min_3words_phrase_length'];
$this->phrase3WordLengthMinOccur $params['min_3words_phrase_occur'];

//parse single, two words and three words

}

function 
get_keywords()
{
$keywords $this->parse_words().$this->parse_2words().$this->parse_3words();
return 
substr($keywords0, -2);
}

//turn the site contents into an array
//then replace common html tags.
function replace_chars($content)
{
//convert all characters to lower case
$content mb_strtolower($content);
//$content = mb_strtolower($content, "UTF-8");
$content strip_tags($content);

$punctuations = array(','')''(''.'"'"'"',
'<''>'';''!''?''/''-',
'_''['']'':''+''=''#',
'$''&quot;''&copy;''&gt;''&lt;',
chr(10), chr(13), chr(9));

$content str_replace($punctuations" "$content);
// replace multiple gaps
$content preg_replace('/ {2,}/si'" "$content);

return 
$content;
}

//single words META KEYWORDS
function parse_words()
{
//list of commonly used words
// this can be edited to suit your needs
$common = array("able""about""above""act""add""afraid""after""again""against""age""ago""agree""all""almost""alone""along""already""also""although""always""am""amount""an""and""anger""angry""animal""another""answer""any""appear""apple""are""arrive""arm""arms""around""arrive""as""ask""at""attempt""aunt""away""back""bad""bag""bay""be""became""because""become""been""before""began""begin""behind""being""bell""belong""below""beside""best""better""between""beyond""big""body""bone""born""borrow""both""bottom""box""boy""break""bring""brought""bug""built""busy""but""buy""by""call""came""can""cause""choose""close""close""consider""come""consider""considerable""contain""continue""could""cry""cut""dare""dark""deal""dear""decide""deep""did""die""do""does""dog""done""doubt""down""during""each""ear""early""eat""effort""either""else""end""enjoy""enough""enter""even""ever""every""except""expect""explain""fail""fall""far""fat""favor""fear""feel""feet""fell""felt""few""fill""find""fit""fly""follow""for""forever""forget""from""front""gave""get""gives""goes""gone""good""got""gray""great""green""grew""grow""guess""had""half""hang""happen""has""hat""have""he""hear""heard""held""hello""help""her""here""hers""high""hill""him""his""hit""hold""hot""how""however""I""if""ill""in""indeed""instead""into""iron""is""it""its""just""keep""kept""knew""know""known""late""least""led""left""lend""less""let""like""likely""likr""lone""long""look""lot""make""many""may""me""mean""met""might""mile""mine""moon""more""most""move""much""must""my""near""nearly""necessary""neither""never""next""no""none""nor""not""note""nothing""now""number""of""off""often""oh""on""once""only""or""other""ought""our""out""please""prepare""probable""pull""pure""push""put""raise""ran""rather""reach""realize""reply""require""rest""run""said""same""sat""saw""say""see""seem""seen""self""sell""sent""separate""set""shall""she""should""side""sign""since""so""sold""some""soon""sorry""stay""step""stick""still""stood""such""sudden""suppose""take""taken""talk""tall""tell""ten""than""thank""that""the""their""them""then""there""therefore""these""they""this""those""though""through""till""to""today""told""tomorrow""too""took""tore""tought""toward""tried""tries""trust""try""turn""two""under""until""up""upon""us""use""usual""various""verb""very""visit""want""was""we""well""went""were""what""when""where""whether""which""while""white""who""whom""whose""why""will""with""within""without""would""yes""yet""you""young""your""br""img""p","lt""gt""quot""copy");
//create an array out of the site contents
$s split(" "$this->contents);
//initialize array
$k = array();
//iterate inside the array
foreach( $s as $key=>$val ) {
//delete single or two letter words and
//Add it to the list if the word is not
//contained in the common words list.
if(mb_strlen(trim($val)) >= $this->wordLengthMin  && !in_array(trim($val), $common)  && !is_numeric(trim($val))) {
$k[] = trim($val);
}
}
//count the words
$k array_count_values($k);
//sort the words from
//highest count to the
//lowest.
$occur_filtered $this->occure_filter($k$this->wordOccuredMin);
arsort($occur_filtered);

$imploded $this->implode(", "$occur_filtered);
//release unused variables
unset($k);
unset(
$s);

return 
$imploded;
}

function 
parse_2words()
{
//create an array out of the site contents
$x split(" "$this->contents);
//initilize array

//$y = array();
for ($i=0$i count($x)-1$i++) {
//delete phrases lesser than 5 characters
if( (mb_strlen(trim($x[$i])) >= $this->word2WordPhraseLengthMin ) && (mb_strlen(trim($x[$i+1])) >= $this->word2WordPhraseLengthMin) )
{
$y[] = trim($x[$i])." ".trim($x[$i+1]);
}
}

//count the 2 word phrases
$y array_count_values($y);

$occur_filtered $this->occure_filter($y$this->phrase2WordLengthMinOccur);
//sort the words from highest count to the lowest.
arsort($occur_filtered);

$imploded $this->implode(", "$occur_filtered);
//release unused variables
unset($y);
unset(
$x);

return 
$imploded;
}

function 
parse_3words()
{
//create an array out of the site contents
$a split(" "$this->contents);
//initilize array
$b = array();

for (
$i=0$i count($a)-2$i++) {
//delete phrases lesser than 5 characters
if( (mb_strlen(trim($a[$i])) >= $this->word3WordPhraseLengthMin) && (mb_strlen(trim($a[$i+1])) > $this->word3WordPhraseLengthMin) && (mb_strlen(trim($a[$i+2])) > $this->word3WordPhraseLengthMin) && (mb_strlen(trim($a[$i]).trim($a[$i+1]).trim($a[$i+2])) > $this->phrase3WordLengthMin) )
{
$b[] = trim($a[$i])." ".trim($a[$i+1])." ".trim($a[$i+2]);
}
}

//count the 3 word phrases
$b array_count_values($b);
//sort the words from
//highest count to the
//lowest.
$occur_filtered $this->occure_filter($b$this->phrase3WordLengthMinOccur);
arsort($occur_filtered);

$imploded $this->implode(", "$occur_filtered);
//release unused variables
unset($a);
unset(
$b);

return 
$imploded;
}

function 
occure_filter($array_count_values$min_occur)
{
$occur_filtered = array();
foreach (
$array_count_values as $word => $occured) {
if (
$occured >= $min_occur) {
$occur_filtered[$word] = $occured;
}
}

return 
$occur_filtered;
}

function 
implode($gule$array)
{
$c "";
foreach(
$array as $key=>$val) {
@
$c .= $key.$gule;
}
return 
$c;
}
}


Есть правда еще 4-я версия этого класса, но там небольшие корректировки.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.