Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по работе функции similar_text ()
 
 автор: sega_z   (29.08.2011 в 15:42)   письмо автору
 
 

Как известно данная функция учитывает регистр символов.
Попробовал слова обработать функцией strtolower (), но почему то не помогло?


Так все работает:
<?
   $str1 
"Дом";
   
$str1 strtolower($str1); // Приводим все символы к нижнему регистру
   
$str2 "дом";
   
$str2 strtolower($str2); // Приводим все символы к нижнему регистру
   
$var1 similar_text($str1$str2, &$tmp);
   if (
$tmp >= 70)
   {
   echo 
"$tmp <br>"// схожесть строк в процентах
   
}
?>

А так почему то нет:

<?
include(" ");//Подключаемся к базе данных
   
$str1 "дом";
   
$str1 strtolower($str1); // Приводим все символы к нижнему регистру
   
$a1 explode(" ",$str1); // Заносим слова в массив
   
$result mysql_query("SELECT * FROM doska ORDER BY id DESC",$db);
   
$myrow mysql_fetch_array ($result);
   do
   {
   
$str2 $myrow['zagolovok'];
   
$str2 strtolower($str2); // Приводим все символы к нижнему регистру
   
$a explode(" ",$str2); // Заносим слова в массив
   
for($i 0$i count($a); $i++)
   {
   
$var1 similar_text($a1[0], $a[$i], &$tmp);
   if (
$tmp >= 70)
   {
   
$id $myrow['id'];
   echo 
"$id <br>"// схожесть строк в процентах
   
}
   }
   }
   while (
$myrow mysql_fetch_array ($result));
?>


Т.е. если в базе слово "дом" с заглавной буквы, то совпадений уже 0%

  Ответить  
 
 автор: cheops   (29.08.2011 в 18:57)   письмо автору
 
   для: sega_z   (29.08.2011 в 15:42)
 

А кодировки базы данных и скрипта совпадают?

  Ответить  
 
 автор: sega_z   (29.08.2011 в 19:28)   письмо автору
 
   для: cheops   (29.08.2011 в 18:57)
 

Кодировка базы данных ср-1251. А как узнать кодировку скрипта?

Причем, на локальном сервере работает, а на удаленном нет!!!

  Ответить  
 
 автор: cheops   (30.08.2011 в 17:10)   письмо автору
 
   для: sega_z   (29.08.2011 в 19:28)
 

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

  Ответить  
 
 автор: sega_z   (01.09.2011 в 09:27)   письмо автору
 
   для: cheops   (30.08.2011 в 17:10)
 

А как посмотреть кодировку страницы в браузере?

  Ответить  
 
 автор: cheops   (01.09.2011 в 11:51)   письмо автору
 
   для: sega_z   (01.09.2011 в 09:27)
 

В разных браузерах это осуществляется по-разному, обычно, эти пункты меню находятся в разделе Вид, Кодировка.

  Ответить  
 
 автор: sega_z   (01.09.2011 в 13:09)   письмо автору
 
   для: cheops   (01.09.2011 в 11:51)
 

У меня кодировка браузера Windows-1251

  Ответить  
 
 автор: DJ Paltus   (01.09.2011 в 15:03)   письмо автору
 
   для: sega_z   (29.08.2011 в 15:42)
 

а у меня вопрос не по теме!
А что это за амперсанд в аргументах функции?

 $var1 = similar_text($str1, $str2, &$tmp); 

  Ответить  
 
 автор: Tamplier   (01.09.2011 в 15:09)   письмо автору
 
   для: DJ Paltus   (01.09.2011 в 15:03)
 

>а у меня вопрос не по теме!
>А что это за амперсанд в аргументах функции?
>

> $var1 = similar_text($str1, $str2, &$tmp); 
>


Цитировать не буду, посмотрите ссылку все станет ясно - http://www.php.su/functions/custom/?2

  Ответить  
 
 автор: cheops   (01.09.2011 в 15:17)   письмо автору
 
   для: DJ Paltus   (01.09.2011 в 15:03)
 

При указании амперсанда перед параметром функции, вы включаете так называемый "побочный эффект". Пусть имеется скрипт, изменение значения переменной $test внутри функции не отражается на внешней переменной.
<?php 
  $test 
1;
  echo 
"test = $test<br>"// 1
  
funct($test);            // 2
  
echo "test = $test<br>"// 1

  
function funct($test)
  { 
    
$test++;
    echo 
"test = $test (in funct)<br>";
  } 
?>
если же параметр передается по ссылке, то измененное значение переменной $test передается во внешнюю среду, после выполнения функции.
<?php 
  $test 
1;
  echo 
"test = $test<br>"// 1
  
funct($test);            // 2
  
echo "test = $test<br>"// 2

  
function funct(&$test)
  { 
    
$test++;
    echo 
"test = $test (in funct)<br>";
  } 
?>

  Ответить  
 
 автор: cheops   (01.09.2011 в 15:28)   письмо автору
 
   для: DJ Paltus   (01.09.2011 в 15:03)
 

Если в исходной функции не используются &, то при помощи & перед параметром можно явно включить "побочный эффект". Однако, такой подход признан устаревшим и будет исключен в следующих версиях языка. Объект и массивы так и так передаются по ссылкам и считается, что нет надобности в явном включении режима передачи по ссылки с порождением "побочного эффекта".
<?php 
  $test 
1;
  echo 
"test = $test<br>"// 1
  
funct(&$test);           // 2
  
echo "test = $test<br>"// 2

  
function funct($test)
  { 
    
$test++;
    echo 
"test = $test (in funct)<br>";
  } 
?>

  Ответить  
 
 автор: sega_z   (01.09.2011 в 16:16)   письмо автору
 
   для: cheops   (01.09.2011 в 15:28)
 

Ну так в чём все таки дело?
Кто нибудь подскажет, почему на локальном сервере данный скрипт работает нормально, а на удаленном нет.

  Ответить  
 
 автор: cheops   (01.09.2011 в 17:47)   письмо автору
 
   для: sega_z   (01.09.2011 в 16:16)
 

С 80% вероятностью дело в локали, если в Windows она выставляется при установки операционной системы, то в UNIX-подобных средах локаль для русских кодировок нужно выставлять явно. Если это хостинг, то хорошо бы попытать службу тех.поддержки на предмет работоспособности функции или хотя бы параметров локали (они для разных серверов могут быть разными).

  Ответить  
 
 автор: DJ Paltus   (05.09.2011 в 03:13)   письмо автору
 
   для: cheops   (01.09.2011 в 15:28)
 

Вроде как маленькая лазейка к глобализации переменной, имхо. Спасибо, ВЖВУ!. (век живи...)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования