Зоглавная буква

Тема в разделе "PHP", создана пользователем Uglik, 14 июл 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Подскажиет как можно реализовать след задачу...

    Есть скрипт постинга ... нужно что бы загаловки начинались с большой буквы... на денвере реализовал с помощью функции

    $title = ucfirst($title);

    Но на хостинге почему то не работает... как можно еще реализвать данную задачу?
     
  2. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Пойдем от сложного к простому. RegExp:
    PHP:
    <?php $text 'zagolovok';
    echo 
    preg_replace('/(^|[.!?]\s+)([a-zа-я])/ie',"'$1'.strtoupper('$2')",$text); ?>
    Работа со строками:
    PHP:
    <?php
    $string 
    "bla-bla-bla"//строка
    $firsLetter substr$string 01); //получаеш перввую букву
    $firsLetter strtoupper($firsLetter); // переводиш в заглавную букву
    $string substr$string 1);//все кроме первой буквы
    echo $firsLetter.$string//выводим нужное
    ?>
    А вот так будет работать и с UTF:
    PHP:
    <?php
    $string 
    "заголовокк"//строка
    $firsLetter mb_substr$string 01"UTF-8"); 
    $firsLetter mb_strtoupper($firsLetter"UTF-8"); 
    $string mb_substr$string 2);
    echo 
    $firsLetter.$string
    ?>
     
  3. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    а что именно не работает на хостинге? не меняет первую букву на заглавную или вообще не видит переменную? можно увидеть результат работы ДО и ПОСЛЕ скрипта? ну и желательно сам скрипт
     
  4. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Не меняет первую букву.... стукни в icq 363--088--два 29
     
  5. awx

    awx Создатель

    Регистр.:
    7 апр 2009
    Сообщения:
    43
    Симпатии:
    4
    Ошибку на функцию выдает?
     
  6. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    ucfirst использует алфавит из локали, если такой локали (похоже что ru_RU.CP1251) нет на сервере то работать не будет.

    можно посмотреть список локалей на сервере с
    PHP:
    system('locale -a');
    альтернативно можно использовать mb_ функции
    PHP:
    //указываем кодировку для mb_ функций
    mb_internal_encoding("windows-1251");
    //ucfirst аналог
    echo mb_strtoupper(mb_substr($text01)).mb_substr($text1);
    или css
    HTML:
    
    <span style="text-transform:capitalize;">текст</span>
    
     
  7. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Никаких ошибок не выдает.... просто не обрабатывается... выводит все загаловки с маленькой...

    Значит на хостинге чего то нехватает... хотя все норм раньше работало....

    Добавлено через 3 минуты
    Через css не катит.... много чего переписывать в двиге нужно...

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

    Если у кого то есть желание помочь постучите в icq буду очень признателен.... нашел еще один баг в срипте, который нужно исправить.... (за помощь готов предложить небольшое вознагрождение)

    Добавлено через 9 минут
     
  8. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Варианты из второго поста проигнорированы полностью, не подходят или они не работают? :)
    Неплохо бы глянуть на сайт или может сообщишь какая кодировка сайта и какая кодировка файла из которого берутся заголовки, чтобы меньше гадать нужно было. Попробую еще разик угадать:
    PHP:
    <?php
        
    function capitalize_first($str) {
            
    $line iconv("UTF-8""Windows-1251"$str); // convert to windows-1251
            
    $line ucfirst($line);
            
    $line iconv("Windows-1251""UTF-8"$line); // convert back to utf-8
           
            
    return $line;
        }
    ?>
    Пользовать так:
    PHP:
    $title capitalize_first($title);
     
  9. Uglik

    Uglik

    Регистр.:
    8 окт 2008
    Сообщения:
    350
    Симпатии:
    14
    Кадировка сайта win1251 и файл в той же кадировке.... и скрипт в той же... постучи в icq(363_088_229) покажу и сайт и скрипт
     
  10. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    После гугления и многочисленных проб, получился вот такой вариант:
    PHP:
    <?php 

    function ucmyfirst($str){
    $xchars=array('а'=>'А','б'=>'Б','в'=>'В','г'=>'Г','д'=>'Д','е'=>'Е','ё'=>'Ё','ж'=>'Ж','з'=>'З','и'=>'И','й'=>'Й','к'=>'К','л'=>'Л','м'=>'М','н'=>'Н','о'=>'О','п'=>'П','р'=>'Р','с'=>'С','т'=>'Т','у'=>'У','ф'=>'Ф','х'=>'Х','ц'=>'Ц','ч'=>'Ч','ш'=>'Ш','щ'=>'Щ','ъ'=>'Ъ','ы'=>'Ы','ь'=>'Ь','э'=>'Э','ю'=>'Ю','я'=>'Я');
    $str[0]=($xchars[$str[0]]!='')?$xchars[$str[0]]:ucfirst($str);
    return 
    $str;
    }


    $title="превед";
    $title=ucmyfirst($title);
    print 
    $title;
    ?>
    Похоже заставить функцию ucfirst работать будет совсем непросто. Проще будет записать функцию ucmyfirst в файл с подключаемыми функциями и поменять в движке все ucfirst на ucmyfirst.

    Сорь, аськой не пользуюсь - надоели спаммеры :)
     
    Uglik нравится это.
Статус темы:
Закрыта.