Подскажите с кодировками

J
На сайте с 08.06.2006
Offline
844
320

Кодировка таблицы utf8_general_ci

Кодировка полей таблицы utf8_general_ci

Кодировка скрипта ютф8 без бом

В конекте к БД указано utf-8

Делаю

function rus_to_lat($string)

{
$abc = array(
"Є"=>"ye","І"=>"i","Ѓ"=>"g","і"=>"i","№"=>"#","є"=>"ye","ѓ"=>"g",
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d",
"Е"=>"e","Ё"=>"yo","Ж"=>"zh",
"З"=>"z","И"=>"i","Й"=>"j","К"=>"k","Л"=>"l",
"М"=>"m","Н"=>"n","О"=>"o","П"=>"p","Р"=>"r",
"С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"x",
"Ц"=>"c","Ч"=>"ch","Ш"=>"sh","Щ"=>"shh","Ъ"=>"",
"Ы"=>"y","Ь"=>"","Э"=>"e","Ю"=>"yu","Я"=>"ya",
"а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
"е"=>"e","ё"=>"yo","ж"=>"zh",
"з"=>"z","и"=>"i","й"=>"j","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"x",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
"—"=>"-","«"=>"","»"=>"","…"=>""," "=>"-","-"=>"-",
"1"=>"1","2"=>"2","3"=>"3","4"=>"4","5"=>"5",
"6"=>"6","7"=>"7","8"=>"8","9"=>"9","0"=>"0"
);
for ($i=0;$i<strlen($string);$i++)
$lat.= $abc[$string[$i]];

return $lat;
}

На $lat.= $abc[$string[$i]]; выдает Notice: Undefined index: � in

$string - запись из таблицы

Что не так?

M
На сайте с 04.12.2013
Offline
223
#1

БД тут причем?

Вы уверены, что у вас в исходной строке нет левых символов (которые отсутствуют в списке ключей массива)? И вы уверены, что у вас кодировка исходной строки и файла с исходником одна и та же и при этом однобайтовая (ф-ция strlen подсчитывает байты)?

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
S
На сайте с 30.09.2016
Offline
469
#2
joost:
Что не так?

Не так тут 2 вещи.

1. Для кириллицы надо писать не strlen(), а mb_strlen().

2. $string[$i] вытащит из строки только полбуквы, поскольку в букве 2 байта.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
J
На сайте с 08.06.2006
Offline
844
#3

1. определить точную кодировку строки

2. иконвить в ютф

?

S
На сайте с 30.09.2016
Offline
469
#4

3. Переписать всё это по-другому.

То есть, существует не менее 2-х вариантов:

Вариант 1: Создать 2 массива $a и $b, после чего str_replace($a, $b, $string);

Вариант 2: strtr($string, $abc);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий