[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Кириллица занимает 2 символа
tarabukinivan
Доброе утро форумчане!
Создал себе сайт. Пока стоит на денвере. База mysql. В ней 2 таблицы. Типы MYISAM. Сравнение utf8_general_ci.
Имеется .htaccess:
AddDefaultCharset utf8
php_flag magic_quotes_gpc Off
ErrorDocument 404 /page404.html

Все страницы в Dos\windows и кодировка utf без бом
1. Сама страница начинается так:
<?php require_once "lib/start.php";?>
<!DOCTYPE html>
<
html lang="en">
<
head>
<
meta charset="utf-8">
<
meta http-equiv="X-UA-Compatible" content="IE=edge">
<
meta name="viewport" content="width=device-width, initial-scale=1">
<
title>Ваш сайт</title>
<
link href="css/bootstrap.min.css" rel="stylesheet">
<
link rel="stylesheet" href="css/font-awesome/css/font-awesome.min.css">
<
link href="css/style.css" rel="stylesheet">
<!--[
if lt IE 9]>
<
script src="js/html5shiv.min.js"></script>
<
script src="js/respond.min.js"></script>
<![
endif]-->
</
head>

2. В странице start
<?php
mb_internal_encoding("UTF-8");
session_start();
define("ADM_LOGIN", "admin");
define("ADM_PASSWORD", "05537645b4fd932a9f293ec1bd535039");
define("DB_HOST", "127.0.0.1");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_NAME", "magmag");
require_once "/home/MagMag/www/lib/functions.php";
...

3. functions.php:
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$mysqli->set_charset("utf8");

4. Потом через функции выборки из БД беру данные:
function getOrders(){
$query = "SELECT * FROM `magorders` ORDER BY `date_order` DESC";
$result = getTable($query);
if(!$result) return array();
return $result;
}
function getTable($query) {
global $mysqli;
$result_set = $mysqli->query($query);
if (is_null($result_set)) return false;
$result = array();
while (($row = $result_set->fetch_assoc()) != false) {
$result[] = $row;
}
$result_set->close();
return $result;
}

5. Прохожусь через цикл foreach
<?php
foreach($orders as $order) {
И хочу сделать вывод только первые 30 символов ячейки order_text, если она содержит более 30 символов.
$str=$order["order_text"];
if(strlen($str)>=30){
$str_text=substr($str,0,30);
echo $str_text."...";
}else echo $str;

Но за одну кириллицу она читает 2 символа. Т.е. Здесь она заходит в if, если в переменной больше 15 символов. И выводит только 15 символов, причем при выводе, если в переменной содержится символ, которая занимает 1 символ (латиница или цифры), то последний символ превращается в "?".
Вобще не понимаю, как, тогда выводить один символ при проходе через цикл for с инкрементом i. Любой $simb[i] будет превращаться в "?"
Как сделать, чтобы кириллица занимала только один символ? Сначала думал это из-за mysql, но оказывается не из-за скл так, как сейчас ввел типа $str="иииииииииииииииииииищщщщщщщщщщщщщщщ"; Онаоказывается введет себя также

 ! 

М
Используй теги форматирования
killer8080
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.