Jump to content
  • 0

Преобразование в верхний регистр не работает для результата запроса


Boron
 Share

Question

Кто может сказать, в чём проблема?

Выполняется запрос:

		$sql  = "SELECT name ";
$sql .= "FROM main_pages ";
$sql .= "WHERE id = ".$_GET['id']." ";
$query = mysql_query($sql);
$main_page_name = strtoupper(mysql_result($query, 0));

Результат выводится таким, каким был получен из запроса (т.е. если была запись "Новости", то так и выводится в смешанном регистре "Новости", а не "НОВОСТИ")

Пробовал и функцию mb_strtoupper, результат тот же.

P.S. var_dump($main_page_name) говорит, что тип переменной - string.

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Извиняюсь, что только сейчас отвечаю, просто вернулся к проблеме только сейчас. :D

$main_page_name = mysql_result($query, 0);
print $main_page_name;
$main_page_name = strtoupper( $main_page_name );
print $main_page_name;

Выводит "НовостиНовости"

SELECT UPPER(`name`)

Выводит "Новости"

Да что за беда такая? :D

Link to comment
Share on other sites

  • 0

а какое у вас значение локали для LC_CTYPE?

попробуйте установить русскую локаль для LC_CTYPE с помощью функции setlocale

Попробуйте поставить ru_RU или ru или rus или что-то подобное.

Link to comment
Share on other sites

  • 0

strtoupper() должна работать, лично у меня работает....

  # Выводим записи
$query_test = mysql_query("SELECT * FROM `test`");
for ($i = 0; $i < mysql_num_rows($query_test); $i++) :
$test = mysql_fetch_array($query_test);
echo "$test[id]";

$test[msg] = strtoupper($test[msg]);
echo "$test[msg]";

Edited by gesandte
Link to comment
Share on other sites

  • 0
а какое у вас значение локали для LC_CTYPE?

попробуйте установить русскую локаль для LC_CTYPE с помощью функции setlocale

Попробуйте поставить ru_RU или ru или rus или что-то подобное.

Про какую локаль идёт речь? Которая задаётся в html теге meta? Или в БД?

В meta UTF-8

В БД utf-general-ci.

P.S. Пробовал изменить запись с "Новости" на "News", всё так-же.

В принципе, забил на вывод больших букв. Но с проблемой всё-таки хотелось бы разобраться. Так что если есть какие идеи, делитесь. Буду рад. :D И могу опробовать, в случае чего решения. (файлик с этой проблемой оставил).

Link to comment
Share on other sites

  • 0
Kel-Tanas

А все остальное?

Кароче впиши в начале скрипта это и скажи, что будет:

if ( !setlocale ( LC_ALL , 'rus') ) {  // для окон
setlocale ( LC_ALL , ‘ru_RU.CP1251′ ); // для чертей и пингвинов
}

Чтобы с флоатом глюков не ловить, еще пиши это

setLocale(LC_NUMERIC , "C", "en_US.CP1251", "en_US", "English");

Link to comment
Share on other sites

  • 0

Помоему проще написать что то типо этого:

$rep = array(
'А','а','Б','б','В','в','Г','г','Д','д',
'Е','е','Ё','ё','Ж','ж','З','з','И','и',
'К','к','Л','л','М','м','Н','н','О','о',
'П','п','Р','р','С','с','Т','т','У','у',
'Ф','ф','Х','х','Ц','ц','Ч','ч','Ш','ш',
'Щ','ш','Ь','ь','Ы','ы','Я','я','Э','э',
'Ю','ю','Ъ','ъ',
);
$q = $_GET[q];
for ($i=0;$i<sizeof($rep);$i+=2) {
$ii = $i+1;
$q = str_replace($rep[$i],$rep[$ii],$q);
}
$q = strtolower($q);

функция strtolower() у меня не работает с русскими строками..

Деревяно, ну а чтож.. зато работает...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy