У меня есть строка, которую я хочу заменить всеми символами 'a' на греческий символ α. Я не хочу преобразовывать элементы html внутри строки, то есть <a href="http://a-url-with-a-characters">text</a>
.Кодировка замены символов php
Функция:
function grstrletter($string){
$skip = false;
$str_length = strlen($string);
for ($i=0; $i < $str_length; $i++){
if($string[$i] == '<'){
$skip = true;
}
if($string[$i] == '>'){
$skip = false;
}
if ($string[$i]=='a' && !$skip){
$string[$i] = 'α';
}
}
return $string;
}
Еще одна функция, которую я сделал работает отлично, но он не принимает во внимание элементы HMTL.
function grstrletter_no_html($string){
return strtr($string, array('a' => 'α'));
}
Я также пробовал много функций кодирования, которые php предлагает без везения.
Когда я повторяю греческую букву, браузер выводит ее без проблем. Когда я возвращаю строку, браузер выводит классический странный знак вопроса внутри треугольника всякий раз, когда происходило замещение.
Мой заголовок имеет <meta http-equiv="content-type" content="text/html; charset=UTF-8">
, и я также пробовал его с помощью php header('Content-Type: text/html; charset=utf-8');
, но снова не повезло.
Строка поступает из базы данных в UTF-8, а сайт находится в Wordpress, поэтому я просто использую функции wordpress для получения содержимого, которое я хочу. Я не думаю, что это проблема с db, потому что, когда я использую свою функцию grstrletter_no_html()
, все работает нормально.
Проблема возникает, когда я повторяю символ строки символом.
Файл сохраняется как UTF-8 без спецификации (блокнот ++). Я также попытался изменить кодировку файла без лишней удачи.
Я также попытался заменить греческую букву соответствующим html-объектом α
и α
, но опять же те же результаты.
Я еще не пробовал никаких регулярных выражений.
Буду признателен за любую помощь и благодарность заранее.
Пробовал: Greek characters encoding works in HTML but not in PHP
EDIT
Решение, основанное на deceze блестящий ответ:
function grstrletter($string){
$skip = false;
$str_length = strlen($string);
for ($i=0; $i < $str_length; $i++){
if($string[$i] == '<'){
$skip = true;
}
if($string[$i] == '>'){
$skip = false;
}
if ($string[$i]=='a' && !$skip){
$part1 = substr($string, 0, $i);
$part1 = $part1 . 'α';
$string = $part1 . substr($string, $i+1);
}
}
return $string;
}
Большое спасибо !!!!! Я тоже понял логику. Благодаря! – Laxmana