Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа со строками PHP-7 (кириллица) utf-8 [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Описание: Ошибка при работе с кириллическими строками в кодировке utf-8
dikoobraz
Отправлено: 22 Апреля, 2018 - 00:14:48
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Странно... Я заменил в php.ini строку mbstring.func_overload = 0 на mbstring.func_overload = 2, но все без изменений.....
 
 Top
Строитель Модератор
Отправлено: 22 Апреля, 2018 - 00:20:43
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Мелкий пишет:
Эх, я не один раз читал мануал до тех пор пока начало получаться что-то работающее регулярно.
Не отпугивайте ТС Радость
Мелкий пишет:
А Джеффри Фридл шикарен, прочитать обязательно стоит, регулярки много где используются.
Полностью поддерживаю ваше мнение! )
(Добавление)
dikoobraz пишет:
но все без изменений.....
Видимо не в том php.ini сменили (их несколько бывает), но я бы вам посоветовал забыть об этом, и прислушаться к совету господина Мелкий.
 
 Top
Raziel
Отправлено: 22 Апреля, 2018 - 00:26:41
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




dikoobraz пишет:
Странно... Я заменил в php.ini строку mbstring.func_overload = 0 на mbstring.func_overload = 2, но все без изменений.....

php перезагрузили? листинг не работающего кода вложите
 
 Top
dikoobraz
Отправлено: 22 Апреля, 2018 - 00:42:10
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Комп перезагрузил, как перезагрузить php не знаю...
 
 Top
Raziel
Отправлено: 22 Апреля, 2018 - 00:43:12
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Он вместе с ним перезагрузился, выложите код который не работает.

echo php_ini_loaded_file(); - выводит путь к загруженному php.ini если он вообще загружен

(Отредактировано автором: 22 Апреля, 2018 - 00:53:16)

 
 Top
dikoobraz
Отправлено: 22 Апреля, 2018 - 00:53:37
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Код:
Спойлер (Отобразить)


Ошибки:
Спойлер (Отобразить)


phpinfo(); показывает mbstring.func_overload = 2



/etc/php/7.0/apache2/php.ini

(Отредактировано автором: 22 Апреля, 2018 - 00:55:30)

 
 Top
Raziel
Отправлено: 22 Апреля, 2018 - 00:56:00
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




А где в листинге line 90?
 
 Top
dikoobraz
Отправлено: 22 Апреля, 2018 - 00:59:22
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Все остальное комментарии
line 90 это строка 13

$output .= $alfavit[$string[$i]];
(Добавление)
Похоже что mbstring не установлен..., а нет установлен, прошу прощения

(Отредактировано автором: 22 Апреля, 2018 - 01:06:22)

 
 Top
Raziel
Отправлено: 22 Апреля, 2018 - 01:05:19
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




[$string[$i]] так с кириллицей делать нельзя в любом случае
 
 Top
dikoobraz
Отправлено: 22 Апреля, 2018 - 01:09:14
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. $word = "слово";
  2. echo $word[0];

Так тоже?

Я уже блин пожалел, что связался с PHP.
Ни в JS, ни в Python, ни в Ruby нет таких проблем с элементарными вещами
 
 Top
Строитель Модератор
Отправлено: 22 Апреля, 2018 - 01:15:12
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




dikoobraz, я же вам скидывал пару вариантов, как это делается для подобных задач... Зачем вам быдлокод? Можно написать и так:
PHP:
скопировать код в буфер обмена
  1. function trans($string){
  2.     $alfavit = array('а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
  3.         'е' => 'e', 'ж' => 'g', 'з' => 'z', 'и' => 'i', 'й' => 'y',
  4.         'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
  5.         'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u',
  6.         'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh',
  7.         'щ' => 'sc', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya'
  8.     );
  9.    
  10.     $output = '';
  11.     foreach(preg_split('~~u', $string, -1, PREG_SPLIT_NO_EMPTY) as $value){
  12.         $output .= $alfavit[$value];
  13.     }
  14.     return $output;
  15. }
  16.  
  17.  $str = "слово";
  18.  echo trans($str);
Только объясните мне, зачем писать 5 строк кода вместо одной? Не понял
 
 Top
dikoobraz
Отправлено: 22 Апреля, 2018 - 01:23:56
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Да блин, почему у препода все работает без костылей, а у меня нет.
Этот пример ответа из домашнего задания.... Мое решение не такое, но тоже рабочее
 
 Top
Raziel
Отправлено: 22 Апреля, 2018 - 01:26:04
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




dikoobraz пишет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $word = "слово";
  2. echo $word[0];

Так тоже?

Я уже блин пожалел, что связался с PHP.
Ни в JS, ни в Python, ни в Ruby нет таких проблем с элементарными вещами


Вместо этого можно
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $word = "слово";
  3. echo $word[0] . $word[1];
  4. ?>


Но зачем?
 
 Top
dikoobraz
Отправлено: 22 Апреля, 2018 - 01:35:02
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Это просто для примера, коротко и ясно определяет проблему
 
 Top
Raziel
Отправлено: 22 Апреля, 2018 - 01:40:52
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2018  


Помог: 0 раз(а)




Для PHP "слово" это массив из 10 символов, "slovo" массив из 5, если вам надо к примеру вывести букву "л" то
CODE (htmlphp):
скопировать код в буфер обмена
  1. echo $word[2] . $word[3];

Но думаю на деле так лучше не делать, просто чтобы понимать в чем проблема.
mb_string заменяет многие стандартные функции, но не учит php работать с многобайтовыми кодировками в целом.
конкретно в этом примере с транслитом самые простое думаю использовать пример строителя с strtr()
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB