- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Помогите найти ошибку, простейший массив для транслитерации, знаю что можно сделать при помощи функции strtr, но в задаче именно этот вариант (я только учусь php)
<?php
function trans($str) {
$output = '';
$trans = array (
"а" => "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d", "е" => "e", "ё" => "yo",
"ж" => "zh", "з" => "z", "и" => "i", "й" => "j", "к" => "k", "л" => "l", "м" => "m",
"н" => "n", "о" => "o", "п" => "p", "р" => "r", "с" => "s", "т" => "t", "у" => "u",
"ф" => "f", "х" => "kh", "ц" => "c", "ч" => "ch", "ш" => "sh", "щ" => "she", "ы" => "y",
"э" => "e", "ю" => "yu", "я" => "ya",
);
//return $str . " => ";
for ($i = 0; $i < strlen($str); $i++) {
$output .= $trans[$str[$i]];
}
//return $output;
echo $output;
}
trans("программирование");
echo '<br/><br/>';
?>
Двести раз поверял - ничего не помогает ! Кто знает - исправьте пожалуйста ошибку .
пользуюсь такой
Я такую юзаю:
В вашем примере проблема из-за кодировки (предполагается однобайтовая), а вреале используется многобайтовая utf-8.
Поменяйте цикл на:
for ($i = 0; $i < mb_strlen($str); $i++) {
$output .= $trans[mb_substr($str, $i, 1)];
}
и всё заработает. В общем используйте ф-ции для многобайтовых кодировок.
по сабжу, не так брали символ в строке, исправьте в цикле
Лучше будет через replace с двумя массивами, в Вашем же случае если в строке будут непредусмотренные символы, они удалятся. Либо так: