ФорумПрограммированиеPHP для идиотов → Кодировка

Кодировка

  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 1:51 д.п.

    Привет пыховцам

    Есть страничка php, в ней форма, в форме поле title.
    В поле title ввожу пирожок, жму сабмит, акшн на другую страничку и на ней echo $_POST['title'] пишет пирожок, НО если смотреть strlen($_POST['title']) то оно не 7 а 14 - почему?
    если делаю utf8_decode($_POST['title']) то strlen нормально считает но тогда echo $_POST['title'] будет ???????

    всю голову сломал, перепробывал кодировки - ниче не работает.
  • truth4oll

    Сообщения: 463 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 2:28 д.п., спустя 37 минут 3 секунды

    Как вариант вот:
    iconv_strlen(($_POST['title'],'UTF-8');
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 2:34 д.п., спустя 6 минут 29 секунд

    mb_*
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 2:34 д.п., спустя 5 секунд

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

    echo substr($_POST['title'], 0, 1);

    или так

    echo $_POST['title'][0];

    выводит ?

    как это починить? пробовал на страничке кодировку менять. не помогает.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 2:35 д.п., спустя 36 секунд

    mb_* =)
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 2:46 д.п., спустя 10 минут 42 секунды

    премного благодарен
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 2:54 д.п., спустя 8 минут 47 секунд

    есче вопрос

    если mb_substr($_POST['title'], 0, 1, 'UTF-8') не заглавная то ее надо сделать заглавной.
    попробовал  mb_strtoupper, strtoupper, ucfirst - не работает.
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz Окт. 30, 2010, 3:07 д.п., спустя 12 минут 36 секунд

    нашел вот такой класс. вроде работает.

    class string{

    function strToUp($lo){
    $up=array("а" => "А","б" => "Б","в" => "В","г" => "Г","д" => "Д","е" => "Е","ж" => "Ж","з" => "З","и" => "И",
    "й" => "Й","к" => "К","л" => "Л","м" => "М","н" => "Н","о" => "О","п" => "П","р" => "Р","с" => "С",
    "т" => "Т","у" => "У","ф" => "Ф","х" => "Х","ц" => "Ц","ч" => "Ч","ш" => "Ш","щ" => "Щ","ъ" => "Ъ",
    "ы" => "Ы","ь" => "Ь","э" => "Э","ю" => "Ю","я" => "Я", "a" => "A", "b" => "B", "c" => "C","d" => "D","e" => "E","f" => "F","g" => "G","h" => "H","i" => "I","j" => "J",
    "k" => "K","l" => "L","m" => "M","n" => "N","o" => "O","p" => "P","q" => "Q","r" => "R","s" => "S",
    "t" => "T","u" => "U","v" => "V","w" => "W","x" => "X","y" => "Y","z" => "Z"
    );

    return strtr($lo, $up);
    }

    function strToLower($up){
    $lo=array("А" => "а","Б" => "б","В" => "в","Г" => "г","Д" => "д","Е" => "е","Ж" => "ж","З" => "з","И" => "и",
    "Й" => "й","К" => "к","Л" => "л","М" => "м","Н" => "н","О" => "о","П" => "п","Р" => "р","С" => "с",
    "Т" => "т","У" => "у","Ф" => "ф","Х" => "х","Ц" => "ц","Ч" => "ч","Ш" => "ш","Щ" => "щ","Ъ" => "ъ",
    "Ы" => "ы","Ь" => "ь","Э" => "э","Ю" => "ю","Я" => "я",
    "A" => "a", "B" => "b", "C" => "c","D" => "d","E" => "e","F" => "f","G" => "g","H" => "h","I" => "i","J" => "j",
    "K" => "k","L" => "l","M" => "m","N" => "n","O" => "o","P" => "p","Q" => "q","R" => "r","S" => "s",
    "T" => "t","U" => "u","V" => "v","W" => "w","X" => "x","Y" => "y","Z" => "z"
    );

    return strtr($up, $lo);
    }

    function firstToUp($lo){
    if (preg_match("/^([a-zA-Zа-яА-Я]{1})(.*)$/", $lo, $fl)){
    $up=$this->strToUp($fl[1]).$fl[2];
    }
    else{
    $up=$lo;
    }
    return $up;
    }
    }
  • Josh

    Сообщения: 2008 Репутация: N Группа: Кто попало

    Spritz Ноя. 1, 2010, 4:42 п.п., спустя 2 дня 14 часов 34 минуты

    А не пробовал
    <form accept-charset="UTF-8"></form>

    ?
    Спустя 123 сек.
    function my_ucfirst($string, $e ='utf-8') {
    if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) {
    $string = mb_strtolower($string, $e);
    $upper = mb_strtoupper($string, $e);
    preg_match('#(.)#us', $upper, $matches);
    $string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $e), $e);
    }
    else {
    $string = ucfirst($string);
    }
    return $string;
    }

    function sentence_case($string) {
    $sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
    $new_string = '';
    foreach ($sentences as $key => $sentence) {
    $new_string .= ($key & 1) == 0?
    my_ucfirst(strtolower(trim($sentence))) :
    $sentence.' ';
    }
    return trim($new_string);
    }
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz Ноя. 2, 2010, 12:58 д.п., спустя 8 часов 15 минут 46 секунд

    sen4ik,
    mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1);

    ?
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz Ноя. 2, 2010, 1:05 д.п., спустя 7 минут 19 секунд

    о, костыль разбанился.
  • sen4ik

    Сообщения: 217 Репутация: N Группа: Адекваты

    Spritz Ноя. 2, 2010, 2:17 д.п., спустя 1 час 12 минут 15 секунд

    спасибо всем, ужо все сделал. работает - так что трогать не буду.
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz Ноя. 2, 2010, 7:28 д.п., спустя 5 часов 10 минут 47 секунд

    sen4ik, так ты не трогай. Просто проверь ;)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!