<?php
$number = 12345 * 67890;
echo substr($number, 3, 1)';
?>
Я так понял, что команда echo должен отобразить какой-то результат в браузере, но у меня ничего не происходит.
Использую Eclipse+PDT(кстати, классная штука), стандартный пакет LAMP+phpmyadmin и бразуер Firefox 4, уже 5.
Спустя 2 минуты, 29 секунд (27.06.2011 - 17:28) Гость_lionsay написал(а):
кодировка UTF-8
Спустя 13 минут, 28 секунд (27.06.2011 - 17:42) SoMeOnE написал(а):
echo substr($number, 3, 1)';
кавычку убери в конце...
Спустя 7 минут, 31 секунда (27.06.2011 - 17:49) lionsay написал(а):
Еще читал что substr не работает в utf-8 и советуют с префиксом mb_substr, но у меня в логе ошибок apache пишет
PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE
Спустя 12 минут, 9 секунд (27.06.2011 - 18:01) lionsay написал(а):
Цитата |
<pre class="sh_sourceCode" rel="php"><span class="sh_function">echo substr</span><span class="sh_symbol">(</span><span class="sh_variable">$number</span><span class="sh_symbol">,</span> <span class="sh_number">3</span><span class="sh_symbol">,</span> <span class="sh_number">1</span><span class="sh_symbol">)</span><span class="sh_string">';</span></pre> кавычку убери в конце... |
Прошу прощения, я тогда изменял этот код как мог и сейчас скопировал этот код прямо из Eclipse. Вот правильный.
<?php
$number = 12345 * 67890;
echo substr($number, 3, 1);
?>
На сайте автора книги lpmj.net(сайт с кодами книги) код уже изменился так:
<?php
$number = 12345 * 67890;
echo substr($number, 4, 1);
?>
ссылка
Но, он все равно ничего не выводит "на обозрение" :).
Спустя 3 минуты, 12 секунд (27.06.2011 - 18:05) Игорь_Vasinsky написал(а):
А Google?
mb_substr
(PHP 4 >= 4.0.6)
mb_substr - получает часть строки.
Описание
string mb_substr (string str, int start [, int length [, string encoding]])
mb_substr() возвращает часть строки str, специфицированную параметрами start и length.
mb_substr() выполняет многобайтную безопасную операцию substr() на основе количества символов. Позиция вычисляется относительно начала str. Позиция первого символа равна 0. Второго 1, и так далее.
Если encoding опущен, принимается внутренняя кодировка.
encoding это кодировка символов. Если опущена, используется внутренняя кодировка.
mb_substr
(PHP 4 >= 4.0.6)
mb_substr - получает часть строки.
Описание
string mb_substr (string str, int start [, int length [, string encoding]])
mb_substr() возвращает часть строки str, специфицированную параметрами start и length.
mb_substr() выполняет многобайтную безопасную операцию substr() на основе количества символов. Позиция вычисляется относительно начала str. Позиция первого символа равна 0. Второго 1, и так далее.
Если encoding опущен, принимается внутренняя кодировка.
encoding это кодировка символов. Если опущена, используется внутренняя кодировка.
<?php
$rest = substr("abcdef", 1); // возвращает "bcdef"
$rest = substr("abcdef", 1, 3); // возвращает "bcd"
$rest = substr("abcdef", 0, 4); // возвращает "abcd"
$rest = substr("abcdef", 0, 8); // возвращает "abcdef"
// к отдельным символам можно обращаться с помощью фигурных скобок
$string = 'abcdef';
echo $string{0}; // выводит a
echo $string{3}; // выводит d
?>
Спустя 6 минут, 11 секунд (27.06.2011 - 18:11) lionsay написал(а):
Игорь_Vasinsky, Спасибо конечно, но я не осилил.
Спустя 6 минут (27.06.2011 - 18:17) Игорь_Vasinsky написал(а):
mb_ - библиотека для многобайтных кодировок, к коим и относится utf-8, такой префикс есть у многих функций, результат работы у них такой же.
Что касаемо твоей sustr() (mb_substr() - для UTF-8)- она возращает часть строки.
Ты поэкспереминтируй - подставь вместо abcdef - свои значения - посмотри когда и как урезается.
По поводу - кодировки - ты проверь - действительно ли это UTF-8 (у меня в подписи линк)
Что касаемо твоей sustr() (mb_substr() - для UTF-8)- она возращает часть строки.
<?php
$rest = substr("abcdef", 1); // возвращает "bcdef"
$rest = substr("abcdef", 1, 3); // возвращает "bcd"
$rest = substr("abcdef", 0, 4); // возвращает "abcd"
$rest = substr("abcdef", 0, 8); // возвращает "abcdef"
// к отдельным символам можно обращаться с помощью фигурных скобок
$string = 'abcdef';
echo $string{0}; // выводит a
echo $string{3}; // выводит d
?>
Ты поэкспереминтируй - подставь вместо abcdef - свои значения - посмотри когда и как урезается.
По поводу - кодировки - ты проверь - действительно ли это UTF-8 (у меня в подписи линк)
Спустя 8 минут, 42 секунды (27.06.2011 - 18:25) lionsay написал(а):
Ок, спасибо. Про это в книге нет, хотя надо было бы написать это в начале.
У меня ведь в начале кириллические буквы вообще не показывались, где-то прочитал, что нужно в начале страницы писать:
У меня ведь в начале кириллические буквы вообще не показывались, где-то прочитал, что нужно в начале страницы писать:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Спустя 5 минут, 37 секунд (27.06.2011 - 18:31) Админ написал(а):
$rest = mb_substr('abcdef', 0, 2,'utf8');
предпочтительней для кириллицы, иначе зябы вылезают
а страницу ты в какой кодировке сохраняешь ?
предпочтительней для кириллицы, иначе зябы вылезают
а страницу ты в какой кодировке сохраняешь ?
Спустя 7 минут, 19 секунд (27.06.2011 - 18:38) lionsay написал(а):
Цитата |
а страницу ты в какой кодировке сохраняешь ? |
Незнаю. Я еще не знаю где в Eclipse сохранять в разных кодировках. Думал та строка задает кодировку. Да и линукс, кажется, обычно сохраняет в UTF-8.
Файл сохранил в UTF-8 в gedit.
Спустя 1 час, 27 минут, 24 секунды (27.06.2011 - 20:06) lionsay написал(а):
Все равно ничего не отображается в браузере.
Все остальное отображается и интерпретируется, но все, что относится к substr и mb_substr, Увы! С кодировкой все нормально.
А у вас оно отображается?
<?php
$rest = substr("abcdef", 1); // возвращает "bcdef"
$rest = substr("abcdef", 1, 3); // возвращает "bcd"
$rest = substr("abcdef", 0, 4); // возвращает "abcd"
$rest = substr("abcdef", 0, 8); // возвращает "abcdef"
// к отдельным символам можно обращаться с помощью фигурных скобок
$string = 'abcdef';
echo $string{0}; // выводит a
echo $string{3}; // выводит d
?>
Все остальное отображается и интерпретируется, но все, что относится к substr и mb_substr, Увы! С кодировкой все нормально.
А у вас оно отображается?
Спустя 21 минута, 24 секунды (27.06.2011 - 20:27) alex12060 написал(а):
lionsay
Эта функция обрезает строку. Принимает 3 аргумента:
Строку $test мы можем представить как массив, в котором есть порядковый номер, и значение, которое принадлежит номеру.
ПН - Порядковый номер
ЗН - Значение
ПЗ НЗ
0 | T |
1 | e |
2 | s |
3 | t |
Вот, начнем рассматривать примеры. Как видно, номера начинаются с 0, а не с 1.
Таким образом, можно вывести определенные символы со строки.
Но этого недостаточно, если хотим вывести определенные кусок текста. Допустим, из строки превысокоблагорассматривающий часть слова - благо.
Нам известно начало и длинна. Есть все для начала:
И на этом можно сделать кучу примеров, приведенных выше.
Но а для работы с UTF-8, используй это:
В общем, это как дополнение. Надеюсь, был полезен.
Эта функция обрезает строку. Принимает 3 аргумента:
- Строку для обрезки
- Начало, откуда обрезаем
- Длину обрезки.
$test = 'Test';
Строку $test мы можем представить как массив, в котором есть порядковый номер, и значение, которое принадлежит номеру.
ПН - Порядковый номер
ЗН - Значение
ПЗ НЗ
0 | T |
1 | e |
2 | s |
3 | t |
Вот, начнем рассматривать примеры. Как видно, номера начинаются с 0, а не с 1.
Таким образом, можно вывести определенные символы со строки.
$test = 'test';
echo $text[0]; // t
echo $text[2]; // s
echo $text[3]; // t
Но этого недостаточно, если хотим вывести определенные кусок текста. Допустим, из строки превысокоблагорассматривающий часть слова - благо.
Нам известно начало и длинна. Есть все для начала:
$text = 'превысокоблагорассматривающий';
// Получаем часть строки:
echo substr($text, 9, 5); // не забываем, что начинаем считать с 0.
И на этом можно сделать кучу примеров, приведенных выше.
Но а для работы с UTF-8, используй это:
header('content-type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8'); // Устанавливаем кодировку для mb
$text = 'превысокоблагорассматривающий';
// Получаем часть строки:
echo mb_substr($text, 9, 5); // не забываем, что начинаем считать с 0.
В общем, это как дополнение. Надеюсь, был полезен.
Спустя 26 минут, 11 секунд (27.06.2011 - 20:53) lionsay написал(а):
WOW!
alex12060, Спасибо, очень подбробно объяснено, то что нужно для новичка.
alex12060, Спасибо, очень подбробно объяснено, то что нужно для новичка.
Спустя 29 минут, 1 секунда (27.06.2011 - 21:22) Invis1ble написал(а):
lionsay
Поставь в начале скрипта
error_reporting(E_ALL);
чтобы видеть, в чем причина. И найди в php.ini директиву
display_errors и поставь значение On:
Ну и перезагрузи apache
Тогда ошибки будут отображаться на экране.
Поставь в начале скрипта
error_reporting(E_ALL);
чтобы видеть, в чем причина. И найди в php.ini директиву
display_errors и поставь значение On:
display_errors = On
Ну и перезагрузи apache
Тогда ошибки будут отображаться на экране.
Спустя 33 минуты, 30 секунд (27.06.2011 - 21:56) Админ написал(а):
alex12060
Цитата |
echo mb_substr($text, 9, 5); // не забываем, что начинаем считать с 0. |
замечал несколько раз, если не указывать четвёртый параметр - ругаться начинает.
Спустя 12 минут, 32 секунды (27.06.2011 - 22:08) lionsay написал(а):
Прошу всех простить меня за нубство.
Invis1ble, Спасибо.
В общем, проблема была в этом:
Я это по книге все проделывал в одном пхп файле, дурачился и экспериментировал. Теперь понял, что это влияет на другие куски кода.
Invis1ble, Спасибо.
В общем, проблема была в этом:
Notice: Undefined variable: newsflash in /home/lionsay/www/nixon/phpproject.php on line 23 Notice: Undefined variable: bulletin in /home/lionsay/www/nixon/phpproject.php on line 23
<?php
$msgs = 5;
echo "У вас " . $msgs . " сообщений.";
$bulletin .= $newsflash; (23 - строка)
echo "<br /";
?>
Я это по книге все проделывал в одном пхп файле, дурачился и экспериментировал. Теперь понял, что это влияет на другие куски кода.
Спустя 24 минуты, 46 секунд (27.06.2011 - 22:33) Invis1ble написал(а):
lionsay
пожалуйста. Логирование ошибок без вывода их на экран при разработке - зло, очень мешает многим новичкам.
Только я не совсем понял, каким образом неинициализированные переменные повлияли на код с substr(), ведь в том куске кода, который ты показал их нет =)
UPD. Хотя есть догадка, что причина была в незакрытом теге <br / из-за чего весь последующий вывод воспринимался браузером как продолжение тега
пожалуйста. Логирование ошибок без вывода их на экран при разработке - зло, очень мешает многим новичкам.
Только я не совсем понял, каким образом неинициализированные переменные повлияли на код с substr(), ведь в том куске кода, который ты показал их нет =)
UPD. Хотя есть догадка, что причина была в незакрытом теге <br / из-за чего весь последующий вывод воспринимался браузером как продолжение тега
Спустя 20 минут, 32 секунды (27.06.2011 - 22:54) lionsay написал(а):
Нуу, этого я пока не знаю. Да, незакрытый тег не заметил, но все же проблема не в этом, кажись. Тег закрыл, но ошибка все равно возникает. Может ему не хватает переменной $newsflash со значением?
Ан нет. Все же в этом и была проблема, как Вы и написали.
Ан нет. Все же в этом и была проблема, как Вы и написали.
Спустя 7 минут, 53 секунды (27.06.2011 - 23:02) lionsay написал(а):
Все же жаль, что Eclipse не все ошибки находит.
Спустя 9 часов, 41 минута, 15 секунд (28.06.2011 - 08:43) alex12060 написал(а):
lionsay
<?php
$msgs = 5;
$newsflash = '';
echo "У вас " . $msgs . " сообщений.";
$bulletin .= $newsflash; (23 - строка)
echo "<br />";
?>
Спустя 34 секунды (28.06.2011 - 08:43) alex12060 написал(а):
Админ
Эт то да, но я использовал функцию mb_internal_encoding();
Эт то да, но я использовал функцию mb_internal_encoding();