|
|
|
| Уважаемые форумчане, доброго времени суток. Проблема проявилась таким образом.
Когда я ввожу в код php строки, то они выводятся на экран нормально, но стоит обработать их функциями mb_strtolower, strtolower, stripos и некоторыми другими и строки сразу же превращаются в вопросы. Например если я введу:
$A="мяч";
echo $B="Наш мячик очень оригинальный!";
|
то $B в таком же виде, как я ввела и будет отображена на экране. Но уже попытка преобразовать строку к нижнему регистру:
echo $loveTextB= mb_strtolower($B);
|
приведёт к тому, что на экране $loveTextB отобразится вот так: ��� ����� ����� ������������!
В итоге результат работы функций непредсказуем. Например, попытка найти первую позиции вхождения в $B подстроки $A:
echo $pos=stripos($loveTextB, $loveTextA);
| или
echo $pos=stripos($B, $A);
|
приведёт к выводу числа 7, что абсолютно не соответствует действительности. И я подозреваю, что это из-за этой вот петрушки с кодировками. Потому что если я перехожу на английский регистр, то всё становится нормально. И перевод к нижнему регистру строку не меняет и номера позиций правильно выдаются.
Тестирую на Denver, PHP Version 5.2.12. В настройках сервера стоит:
character_set_client utf8
character_set_connection utf8
character_set_database cp1251
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
|
Кодировка в разделе для мета тегов указана:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> ;
|
В cкрипте настроек php прописаны команды:
header('Content-Type: text/html; charset= utf-8');
| и
setlocale(LC_ALL, 'Russian_Russia.65001');
|
Подключен файл .htaccess со строкой:
Никто не знает почему некоторые функции php так реагируют на русскую кодировку и как этот момент можно исправить или обойти? | |
|
|
|
|
|
|
|
для: mirra88
(25.04.2013 в 10:20)
| |
<?
$s = 'ТЕКСТ';
header('Content-type: text/html; charset=utf-8');
echo mb_strtolower($s, 'utf-8');
|
| |
|
|
|
|
|
|
|
для: mirra88
(25.04.2013 в 10:20)
| | Нужно внимательнее читать мануал | |
|
|
|
|
|
|
|
для: psychomc
(25.04.2013 в 10:46)
| | Строго говоря в мануале есть все!
Не подскажете нахрена тогда нужены форумы по программированию, если абсолютно все можно найти в мануале и в гугле?
Тем более, что тут ТС явно что-то читал, но недоразобрался!
Да это и не мудрено. Согласитесь, что для новичка разобраться в веб-среде с кодировками не очень просто?
И вопрос задан развернуто, а не просто: "ПОМОГИТЕ, у меня вопросы вместо букаф!!!".
Или вы правда думаете что этот ваш ответ будет кому-то полезен?
Прям вот чел так прочитает, и воскликнет: -Эврика! Мануал! Как я не догадалась! | |
|
|
|
|
|
|
|
для: Sfinks
(25.04.2013 в 11:49)
| | если человек умеет читать, зайдет на php.net и посмотрит описание функции, то с большой вероятностью так и будет. а еще лучше запустить пару примеров и обратить внимание на комментарии, они там даются не просто так
p.s я помню как начинал сам, и допускал много ошибок именно из-за того, что не внимательно читал документацию, а если что-то не получалось, сразу же бежал на форумы. самому решить свою проблему куда полезнее, чем если тебе дадут сразу готовый ответ. считаю, что лучше потратить несколько часов своего времени, но все-таки добиться самому, чем если за тебя это сделает кто-то более опытный за минуты.
поэтому да, я считаю что мой ответ будет кому-то полезен. | |
|
|
|
|
|
|
|
для: psychomc
(25.04.2013 в 10:46)
| | А, что, если внимательно прочитать мануал, а в коде и настройках ничего не менять, то все сразу станет работать правильно? | |
|
|
|
|
|
|
|
для: Yuriev
(25.04.2013 в 12:30)
| | см выше | |
|
|
|
|
|
|
|
для: mirra88
(25.04.2013 в 10:20)
| | Всем спасибо за помощь.
Сonfirm, но ведь явно добавить кодировку
echo mb_strtolower($s, 'utf-8');
| можно только для mb_strtolower, а есть же ещё stripos и mb_stripos... Только строка
header('Content-type: text/html; charset=utf-8');
| тоже не помогла.
В общем, с помощью советов на этом и других форумах проблему удалось решить таким способом:
1 В скрипт php добавила строку указывающую настройки действующие на все мульбайтовые функции:
[mb_internal_encoding("UTF-8");
|
2 Вместо функции stripos стала использовать mb_stripos. | |
|
|
|
|
|
|
|
для: mirra88
(25.04.2013 в 13:21)
| | header('Content-type: text/html; charset=utf-8'); не для помощи, а для корректного вывода, я мог бы его и не указывать в примере.
А что касается stripos, то она с мультибайтными строками не работает, и использовать ее для utf-8 нельзя.
mb_internal_encoding("UTF-8") - это установка кодировки по умолчанию, с которой работают функции, потому и написано вам было mb_strtolower($s, 'utf-8'), так как у вас установка была по умолчанию, а это не UTF-8.
В общем вам правильно заметили, читая о функциях, обращайте внимание на все ее аргументы, даже не обязательные, чтобы потом не "с помощью советов на этом и других форумах..." | |
|
|
|