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

Форум PHP

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

 

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

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

тема: Проблема со strpos
 
 автор: dump   (26.08.2009 в 13:12)   письмо автору
 
 

Может кто-нибудь знает как заставить работать функцию strpos с русскими буквами? При поиске вхождения из русской строки она возвращает 0.

  Ответить  
 
 автор: ander   (26.08.2009 в 13:55)   письмо автору
 
   для: dump   (26.08.2009 в 13:12)
 

Если строка в utf-8 надо использовать mb_strpos

  Ответить  
 
 автор: Trianon   (26.08.2009 в 14:05)   письмо автору
 
   для: ander   (26.08.2009 в 13:55)
 

Если strpos возвращает 0, mb_strpos вернет то же самое.

  Ответить  
 
 автор: Trianon   (26.08.2009 в 14:06)   письмо автору
 
   для: dump   (26.08.2009 в 13:12)
 

пример вызова?

  Ответить  
 
 автор: mihdan   (26.08.2009 в 14:24)   письмо автору
 
   для: dump   (26.08.2009 в 13:12)
 

Если у вас linux-сервер, обычно помогает установка правильной локали при помощи setlocale()

  Ответить  
 
 автор: Trianon   (26.08.2009 в 15:03)   письмо автору
 
   для: mihdan   (26.08.2009 в 14:24)
 

да что ж это за ё.т.м.?
И давно у Вас strpos от локали зависит?!

  Ответить  
 
 автор: mihdan   (26.08.2009 в 15:25)   письмо автору
 
   для: Trianon   (26.08.2009 в 15:03)
 

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

  Ответить  
 
 автор: Trianon   (26.08.2009 в 15:32)   письмо автору
 
   для: mihdan   (26.08.2009 в 15:25)
 

наборы заглавных и строчных букв языка - одно из свойств локализации.
strpos - всего лишь поиск одной цепочки байт внутри другой цепочки байт вне всякой связи с языком, буквы которого этими байтами могут быть (а могут и не быть) закодированы.

  Ответить  
 
 автор: mihdan   (26.08.2009 в 15:39)   письмо автору
 
   для: Trianon   (26.08.2009 в 15:32)
 

Вот за разъяснение благодарен. Спасибо

  Ответить  
 
 автор: GeorgeIV   (26.08.2009 в 15:06)   письмо автору
 
   для: dump   (26.08.2009 в 13:12)
 

Всегда? А может вхождение и находится в первой позиции (индексы идут с 0)?
А еще в этой функции часто путают местами строку и то, что ищется.

  Ответить  
 
 автор: mihdan   (26.08.2009 в 15:29)   письмо автору
 
   для: dump   (26.08.2009 в 13:12)
 

Кодировка какая? И еще:
При сравнении используйте операторы тождественных сравнений (===) (!==) чтобы избежать проблем с определением типов

  Ответить  
 
 автор: dump   (26.08.2009 в 17:30)   письмо автору
 
   для: mihdan   (26.08.2009 в 15:29)
 

Да, спасибо вам за ответы, хотя я и не разобрался со strpos, но я решил этот вопрос с помощью регулярных выражений.

  Ответить  
 
 автор: mihdan   (26.08.2009 в 17:49)   письмо автору
 
   для: dump   (26.08.2009 в 17:30)
 

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

  Ответить  
 
 автор: dump   (26.08.2009 в 18:06)   письмо автору
 
   для: mihdan   (26.08.2009 в 17:49)
 

вот, вполне работоспособный код
<?php
if (empty($_POST['go']))
echo <<<MAIN_FORM
<center><form method=POST>
Theme for parsing
<SELECT NAME="yav_theme">
<option value="astro">Астрономия</option>
<option value="geo">Геология</option>
<option value="gyro">Гироскопия</option>
<option value="litera">Литературоведение</option>
<option value="market">Маркетинг</option>
<option value="math">Математика</option>
<option value="music">Музыковедение</option>
<option value="polit">Политология</option>
<option value="soil">Почвоведение</option>
<option value="law">Правоведение</option>
<option value="psycho">Психология</option>
<option value="phys">Физика</option>
<option value="phylo">Философия</option>
<option value="chemi">Химия</option>
<option value="estetic">Эстетика</option>
</SELECT><br><br>
Number of posts
<input name="post" type="text" value="3" size="41" /><br><br>
email
<input type='box' size="30"><br><br>
<input name="go" type="submit" value="Старт!"/>
</form>
</center>
MAIN_FORM;
else
{
$part = array(
'astro' => 'http://vesna.yandex.ru/astronomy.xml',
'geo' => 'http://vesna.yandex.ru/geology.xml',
'gyro' => 'http://vesna.yandex.ru/gyroscope.xml',
'litera'=> 'http://vesna.yandex.ru/literature.xml',
'market'=> 'http://vesna.yandex.ru/marketing.xml',
'math'=> 'http://vesna.yandex.ru/mathematics.xml',
'music'=> 'http://vesna.yandex.ru/music.xml',
'polit' => 'http://vesna.yandex.ru/polit.xml',
'soil'=> 'http://vesna.yandex.ru/agrobiologia.xml',
'law'=> 'http://vesna.yandex.ru/law.xml',
'psycho'=> 'http://vesna.yandex.ru/psychology.xml',
'phys' => 'http://vesna.yandex.ru/physics.xml',
'phylo' => 'http://vesna.yandex.ru/philosophy.xml',
'chemi' => 'http://vesna.yandex.ru/chemistry.xml',
'estetic' => 'http://vesna.yandex.ru/estetica.xml'
);
$url=$part[$_POST['yav_theme']];
for ($i=1;$i<=$_POST['post'];$i++)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$referat=curl_exec($ch);
curl_close($ch);
preg_match('#<h1 style="color:black; margin-left:0;">(.*?)</h1>#i', $referat, $theme);
$theme[1] = mb_substr($theme[1], 7, -1);
preg_match('#<p>(.*)</p>#si', $referat, $text);
$text[1]=strip_tags($text[1]);
mail('canyouloveblog@yandex.ru',$theme[1],$text[1]);
}
echo 'All that you wanted is completed!';
}
?>

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

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