PHP: робимо "міні-БД" на текстовому файлі. Htmlspecialchars - Перетворює спеціальні символи в HTML-сутності Настроювана фонова картинка або фон


echo " ";
echo " ";
echo " ";
echo "Hello, today is";
echo date("l, F jS, Y"); //other php code here echo "

";
echo "";
?>

Це буде, якщо випливає з HTML Code Coloring option в most HTML/PHP editors, які дозволяють для легкої understanding of roll of HTML tags. Ви повинні вимкнути будь-який двосторонній quote within HTML code with backslash.

PHP in HTML - file extensions

Якщо є файл файлів PHP code, він повинен мати PHP extension. У більшості випадків це є .php, але ви можете також налаштувати .htaccess файл для читання PHP code в HTML файлі без renaming it або changing its extension. Після того, як можна побачити "handlers", які повинні бути added in order to achieve this

Для нормально configured web server:

AddHandler cgi-script .html .htm

A web server running FastCGI:

AddHandler fcgid-script .html .htm Note: this is tested and works with the NTC web hosting servers. Якщо ви використовуєте різні туристичні послуги, consult them for assistance. Додатково, якщо ви робите з незмінними проблемами, ви можете помітити, щоб перейти до NTC Hosting в порядку, щоб отримати PHP optimized стабільні сервери вам потрібно.

HTML in PHP

Ви можете використовувати HTML code in a PHP script . Це може бути дуже корисним, якщо ви маєте побудувати свою повну сторінку в PHP, але потрібно включити в custom HTML form, для прикладу. Все, що ви потребуєте, щоб повідомити відповідь HTML і PHP, щоб відкрити tags, відкрити сторінку з PHP:

Using HTML in PHP:


$Fname = $_POST["Fname"];
$Lname = $_POST["Lname"];
?>


Personal INFO



First Name:

Last Name:


echo "Hello, ".$Fname." ".$Lname.".
";
?>

While this looks a bit complicated, it фактично saves you a lot of code. Тут, ми використовуємо $PHP_SELF super global, які дозволяють використовувати параметри філій, визначені під ним, в тому ж файлі. Зазвичай, для таких форм дві файли створюються - першою є HTML-форма їїself і second one is backend PHP файл, який додає всі роботи.

Якщо ви маєте скорочені PHP application , які релізи на великому рядку файлів, і ви тільки хочете, щоб зробити все як можливе, це може бути великої допомоги.

PHP with NTC Hosting

NTC Hosting offers його клієнтів є ultimate web hosting solution . Всі наші web hosting плани надають підтримку для HTML і дають вам можливість досягти між

Як і у будь-якому ремеслі, в PHP існує маса всіляких хитрощів, що відчутно допомагають полегшити життя простого програміста. Ось деякі з цих хитрощів.

Трюк 1: передача масивів із форми.

З HTML-форми можна передавати як значення (змінні), а й масиви. Припустимо, ми маємо форму з наступним полем:

При надсиланні даних з форми PHP-скрипт отримає значення з поля cargo як змінну $cargo. Але якщо замість "cargo" вказати "cargo", то з поля буде відправлено скрипту вже не змінна, а масив $cargo, єдиний елемент якого буде мати одиницю як ключ і вміст поля як значення. При автоматичному формуванні форми (скажімо, при генерації прайс-листа з безліччю найменувань) - трюк воістину незамінний, та й обробку масиву скриптом куди простіше організувати, ніж аналіз купи змінних з назвами на зразок tovar1, tovar2 і т.д.

Трюк 2: скорочена форма запису умови в PHP.

Конструкцію...

echo "param=";~^~if($a==1)~^~( echo "1"; )~^~else ( echo "2"; )

Набагато простіше (і коротше) викласти у скороченій формі:

echo "param=".($a==1?"1":"2");

Трюк 3: аналіз HTML-кнопок типу submit.

HTML-кнопка "submit", як відомо, відправляє дані HTML-форми серверу (у нашому випадку на обробку PHP-скрипту). А як бути, якщо у формі потрібно кілька кнопок, що передбачають різні варіанти обробки даних? Зіткнувшись із цим завданням, чомусь мало хто згадує, що кнопки типу «submit» мають власний атрибут «value». Ні, звичайно, всім відомо, що цей атрибут виводить напис на кнопці, іншого значення йому, як правило, не надають. Тим часом у разі наявності у кнопок типу submit атрибута name текст підписів на кнопках відправляється з форми на сервер поряд з іншими даними і може бути проаналізований скриптом, що і дозволить зробити стільки різних обробок даних по натисканню різних кнопок типу submit скільки душі заманеться. Перевага трюку в тому, що ніяких полів типу «hidden» у цьому випадку не потрібне.

Трюк 4: неіснуючі параметри функцій PHP.

Загальновідомо, що при зверненні до функцій PHP необхідно вказувати рівно стільки ж змінних, скільки повинна приймати функція:

$hour=16;~^~$minute=35;~^~echo today_is($hour,$minute);~^~...~^~function today_is($hour,$minute);~^~(~ ^~...~^~)

Куди менш відомо, що для змінних у заголовку функції можна вказувати значення за замовчуванням (для використання у разі відсутності значень змінних або самих змінних при зверненні ззовні), що дозволить звертатися до функції з будь-якою кількістю змінних або взагалі не вказувати:

function today_is($hour=16,$minute=0)~^~(~^~...~^~)

Трюк 5: запобігання кешування JS-скриптів та CSS-стилів.

Скільки народу щодня лається, змінивши вміст JS-скрипту або стилів CSS і виявивши, що браузер міцно закешував стару версію і не бажає показувати результати роботи нової. Особливо ті, хто має в компанії доступ в інтернет здійснюється через проксі-сервер. Чого тільки не робиться в подібних випадках: в meta-розділ ставляться заголовки з терміном давності, що пройшов, meta-теги антикешування і т. д. Тим часом іноді достатньо поставити після згадування відповідного файлу псевдопараметр у вигляді випадкового числа, що генерується коротеньким шматочком коду PHP:

Щоб під час відкриття сторінки завжди підвантажувалася виключно свіжа версія файлу.

Трюк 6: лапки, апострофи та інтерпретація тексту.

До вибору контейнера для стрінгових (текстових) значень найчастіше прийнято підходити дещо недбало. А даремно: багато хто забуває, що вміст подвійних текстових лапок (") інтерпретатор PHP завжди аналізує на наявність змінних, тоді як до вмісту контейнерів з одиночних лапок (апострофів) він абсолютно байдужий, відображаючи їх точно символ в символ без інтерпретації.

Тому тексти зі змінними зручніше укладати в нерозривні подвійні лапки:

$text="Доброго дня, $(client)!";

Зате незручний код з апострофами виконується помітно швидше, особливо в циклах:

$text=Здрастуйте, .$client.!;

Трюк 7: миттєвий висновок.

Ще один чудовий спосіб прискорити виконання сценарію — замість того, щоб негайно і щоразу виводити командою, що все трапилося під руку. echo, накопичувати тестовий вміст у змінній, а потім вивести цю змінну один раз:

$mytext="variant 1";~^~$mytext.=" encode";~^~$mytext.=" access";~^~echo $mytext;

Зверніть увагу, що операція конкатенації записана у скороченому вигляді: $mytext.=, а не $mytext=$mytext.. Економія часу – до десятикратного скорочення часу виведення. Вражає?

Трюк 8: передача масиву з полів типу checkbox.

Трюк № 1 дозволяє нам передавати із HTML-форми масиви. А в даному трюку проаналізуємо іншу ситуацію: припустимо, нам треба передати масив із форми, в якій є лише поля типу checkbox(це такий маленький квадратик, у якому при натисканні з'являється галочка). Наприклад, у нас є список міст, з якого користувач може вибирати потрібні йому міста, але при надсиланні даних ми хочемо відправляти не тільки ідентифікатори обраних користувачем міст, але й назви останніх. А приховані поля типу hiddenпоряд з чекбоксами нам робити дуже не хочеться (щоб не обтяжувати код сторінки і масу даних, що відправляються на сервер). Як бути?

Вихід дуже простий. Як відомо, за замовчуванням поле типу checkbox(ось таке, можете навіть натиснути на нього: ) зазвичай може мати значення "on" (поле вибрано, тобто в ньому стоїть галочка) або "off" (поле не вибрано). Для поля також можна вказати альтернативне значення, наприклад, 1. Однак далеко не всі замислюються про те, що для цього поля можна вказати взагалі будь-яке значення та хоч текст роману «Війна і мир». І це значення буде акуратно передано серверним скриптам на аналіз та обробку:

Користувач вибирає потрібні пункти, натискає кнопку «Надіслати», і на сервер відправляється масив з вибраних чекбоксів, в якому опція nameЧекбокс є назвою змінної, а опція value- Її значенням. Стосовно до PHPце рівнозначно рядку:

$id548=Toyota Landcruiser;

А тепер знову згадаємо про трюк № 1. Припустимо, ми не хочемо аналізувати купу змінних, а хочемо натомість проаналізувати один-єдиний масив. Теж нескладно:

І внаслідок появи двох квадратних дужок навколо цифри в аргументі опції nameЧекбокс на сервер відправляється вже не змінна $id548, а елемент масиву $idіз ключем 548.

Підсумок? Дуже непоганий: з одного чекбоксу ми передали серверу аж цілих три параметри - найменування масиву, ключ елемента та його значення, без будь-яких додаткових прихованих полів та зайвого HTML-коду.

(PHP 4, PHP 5, PHP 7)

htmlspecialchars - Перетворює спеціальні символи на HTML-сутності

Опис

String htmlspecialchars (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]])

У HTML деякі символи мають особливе значення і мають бути представлені у вигляді HTML сутностей, щоб зберегти їх значення. Ця функція повертає рядок, над яким проведено ці перетворення. Якщо вам потрібно перетворити всі можливі сутності, використовуйте htmlentities().

Якщо вхідний рядок, переданий у цю функцію, та результуючий документ використовують однакове кодування символів, то цієї функції достатньо, щоб підготувати дані для вставки в більшість частин HTML документа. Однак, якщо дані містять символи, не визначені в кодуванні символів результуючого документа і ви очікуєте збереження цих символів (як числові або іменовані сутності), то вам буде недостатньо цієї і htmlentities()функцій (які лише перетворюють підрядки з відповідними сутностями). Необхідно використовувати функцію mb_encode_numericentity().

Виробляються такі перетворення:

  • "&" (амперсанд) перетворюється на "&"
  • """ (подвійна лапка) перетворюється на """ в режимі ENT_NOQUOTES is not set.
  • """ (одинакова лапка) перетворюється на """ (або ") тільки в режимі ENT_QUOTES.
  • "<" (знак "меньше чем") преобразуется в "<"
  • ">" (знак "більше ніж") перетворюється на ">"

Список параметрів

Конвертований рядок ( string).

Бітова маска з вказаних нижче прапорів, що визначають режим обробки лапок, некоректних кодових послідовностей і тип документа, що використовується. За замовчуванням використовується ENT_COMPAT | ENT_HTML401.

Доступні значення параметра flags
Назва константи Опис
ENT_COMPAT Перетворює подвійні лапки, одинарні лапки не змінюються.
ENT_QUOTES Перетворює як подвійні, і одинарні лапки.
ENT_NOQUOTES Залишає без зміни як подвійні, так і одинарні лапки.
ENT_IGNORE Без будь-яких повідомлень відкидає некоректні кодові послідовності замість повернення порожнього рядка. Використання цього прапора не рекомендується, оскільки це може призвести до негативних наслідків, пов'язаних з безпекою.
ENT_SUBSTITUTE Замінює некоректні кодові послідовності символом заміни Юнікоду U+FFFD у разі використання UTF-8 та FFFD; при використанні іншого кодування замість повернення порожнього рядка.
ENT_DISALLOWED Замінює неправильні коди символів для заданого типу документа символом заміни юнікод U+FFFD (UTF-8) або FFFD; (при використанні іншого кодування) замість того, щоб залишати все як є. Це може бути корисним, наприклад, для того, щоб переконатися у формальній правильності XML-документів із вбудованим зовнішнім контентом.
ENT_HTML401 Обробка коду відповідно до HTML 4.01.
ENT_XML1 Обробка коду відповідно до XML 1.
ENT_XHTML Обробка коду відповідно до XHTML.
ENT_HTML5 Обробка коду відповідно до HTML 5.
encoding

Необов'язковий аргумент, що визначає кодування, що використовується при конвертації символів.

Якщо не вказано, то значення за промовчанням для encoding залежить від використовуваної версії PHP. У PHP 5.6 і старше, для значення за промовчанням використовується конфігураційна опція default_charset . У PHP 5.4 та 5.5 використовується UTF-8за замовчуванням. Більш ранні версії PHP використовують ISO-8859-1.

Хоча цей аргумент є технічно необов'язковим, рекомендується вказати правильне значення для вашого коду, якщо ви використовуєте PHP 5.5 або вище, або якщо ваша опція конфігурації default_charset може бути задана неправильно для вхідних даних.

Для цілей цієї функції кодування ISO-8859-1, ISO-8859-15, UTF-8, CP866, CP1251, CP1252і KOI8-Rє практично еквівалентними, припускаючи те, що сам рядок string містить коректні символи у зазначеному кодуванні, то символи, що змінюються htmlspecialchars(), залишаться на тих самих місцях у всіх цих кодуваннях.

Підтримуються такі кодування:

Підтримувані кодування
Кодування Псевдоніми Опис
ISO-8859-1 ISO8859-1 Західноєвропейська Latin-1.
ISO-8859-5 ISO8859-5 Рідко використовуване кириличне кодування (Latin/Cyrillic).
ISO-8859-15 ISO8859-15 Західноєвропейська Latin-9. Додає символ євро, французькі та фінські літери до кодування Latin-1 (ISO-8859-1).
UTF-8 8-бітна Unicode, сумісна з ASCII.
CP866 ibm866, 866 Кирилічна кодування, що застосовується в DOS.
CP1251 Windows-1251, win-1251, 1251 Кирилічна кодування, що використовується у Windows.
CP1252 Windows-1252, 1252 Західно-європейське кодування, що використовується у Windows.
KOI8-R koi8-ru, koi8r Російське кодування.
BIG5 950 Традиційний китайський, застосовується переважно на Тайвані.
GB2312 936 Спрощена китайська, стандартне національне кодування.
BIG5-HKSCS Розширена Big5, що застосовується в Гонг-Конзі.
Shift_JIS SJIS, SJIS-win, CP932, 932 Японське кодування.
EUC-JP EUCJP, eucJP-win Японське кодування.
MacRoman Кодування, яке використовується в Mac OS.
"" Порожній рядок активує режим визначення кодування з файлу скрипта (Zend multibyte), default_charset та поточної локалі (див. nl_langinfo()і setlocale()), у вказаному порядку. Не рекомендується використовувати.

Зауваження: Інші кодування не підтримуються, замість них буде застосовано кодування за умовчанням та згенеровано попередження.

double_encode

Якщо параметр double_encode вимкнений, то PHP не перетворюватиме існуючі html-сутності. За замовчуванням все перетворюється без обмежень.

20.6K

PHP — це серверна мова програмування, що вбудовується. Більшість його синтаксису запозичена з C, Java і Perl. А також додана пара унікальних характерних лише для PHP функцій. Основна мета цієї мови - створення динамічно генерованих PHP HTML сторінок.

PHP у HTML

Під час створення складних веб-сторінок ви зіткнетеся з необхідністю об'єднати PHP та HTML для реалізації конкретних завдань. На перший погляд це може здатися складним, оскільки PHP та HTML є двома незалежними дисциплінами, але це не так. PHP призначений для взаємодії з HTML і його код може бути включений в розмітку сторінки.

У HTML-сторінки PHP-код включається за допомогою спеціальних тегів. Коли користувач відкриває сторінку, сервер обробляє PHP-код, а потім надсилає результат обробки (не сам PHP-код) у браузер.

HTML та PHP досить просто об'єднати. Будь-яка частина PHP-скрипту за межами тегівігнорується PHP-компілятором і передається безпосередньо до браузера. Якщо подивитися на приклад, наведений нижче, можна побачити, що повний PHP-скрипт може виглядати наступним чином:

Привіт, сьогодні.

Наведений вище код - це звичайний HTML з невеликим фрагментом PHP, який виводить поточну дату, використовуючи вбудовану функцію date. При цьому весь HTML ігноруватиметься PHP-компілятором і передаватиметься у браузер без змін.

Інтегрувати PHP у HTML дійсно дуже легко. Пам'ятайте, що скрипт — це HTML-сторінка із включенням певного PHP коду. Можна створити скрипт, який міститиме лише HTML (без тегів), і він нормально працюватиме.

Більш просунуті методи:

  • Menu Item


та результат:

PHP в HTML за допомогою short_open_tag

Якщо потрібно максимально скоротити код, перед тим, як в PHP вставити HTML, ви можете використовувати short_tags. В результаті не потрібно буде вводитиshort_tags» з « Off» на « On“. Хоча на більшості серверів цей параметр вже увімкнено, завжди краще перевірити це вручну. Проблема, яка може виникнути під час використання коротких тегів – це конфлікт при використанні XML . У XML синтаксичне вираз

PHP в HTML за допомогою short__tag

Hello, today is.

Майте на увазі, що якщо потрібно створити сайт, сумісний з максимальною кількістю платформ, при вставці PHP в HTML не варто покладатися на short_tags.

HTML у PHP з використанням echo

Ще один спосіб інтеграції HTML у PHP-файл - команда echo: .

Це вплине на підсвічування розмітки у більшості редакторів. Тому необхідно виділяти всі подвійні лапки всередині HTML-коду за допомогою зворотної косої межі.

PHP в HTML - розширення файлів

Для стандартно налаштованого веб-сервера:

AddHandler cgi-script .html .htm

Для веб-сервера із запущеним FastCGI:

AddHandler fcgid-script .html .htm

HTML у PHP

Також можна використовувати HTML-код у PHP-скриптах. Все, що потрібно зробити, це при відкритті сторінки за допомогою PHP змінити порядок тегів HTML і PHP, що відкриваються.

Передача даних через масив $_SESSION дозволена одноразово, надіслані дані відразу видаляються. Це може стати в нагоді, наприклад, при "поверненні" у форму введених в іншому модулі даних.

Добре, коли всі службові функції об'єднані в один модуль, який підключають основні модулі через директиву require_once . Ми свій модуль службових функцій назвемо function.php і, крім згаданих методів trimall та magic, включимо туди такі функції:

  • read() - читатиме поточну базу і повертатиме масив записів;
  • write($a) - записуватиме масив записів $a у файл;
  • get_index_by_name ($a,$name) - шукатиме на ім'я $name відповідний запис і повертатиме її номер (з нуля) або значення -1, якщо запис не знайдено. Це знадобиться, щоб відрізняти додавання нового запису від редагування існуючого.

Крім того, файл функцій підключить конфігураційний файл і запустить сесію - ці можливості можуть знадобитися будь-якому модулю, який його підключає.

Файл function.php
$item) ( list ($myname, $mynumber) = explode (DIV, $item); if ($name == mb_strtolower(trimall($myname),"UTF-8")) return $index; ) return -1 ; ) ?>

Зверніть увагу, що функція read додатково фільтрує масив записів від порожніх рядків (про всяк випадок, взагалі-то їх не повинно виникати), а trimall спочатку замінить будь-який непустий ланцюжок розділювачів на один пробіл (друга preg_replace), а потім видалить можливі зайві роздільники в початку і кінці рядка, що залишився (перший preg_replace).

Також є нюанс із функцією read у сенсі сумісності коду. Так як в єдиному її рядку є анонімна функція, передбачається використання PHP версії не нижче 5.3. Якщо треба нижче – замініть код на такий, де функція фільтрації іменована або зовсім не використовується, як тут:

Function read () ( $str=@file_get_contents (FILENAME); $a=explode("\n",$str); return $a; )

Також важливим є коректне приведення рядка в Юнікоді до нижнього регістру (див. mb_strtolower у коді). А локаллю ми тут не користуємось.

Здається, настав час писати основний файл index.php. Він вирішуватиме наступні завдання:

  • виводити форму для додавання нового запису, який обробляє модуль add.php;
  • поряд з формою додавання виведемо додаткові команди - очищення форми "самовизовом" скрипта без параметрів (кнопка тут підійде, т.к. не передає на сервер даних) та посилання для звернення до модуля сортування записів на ім'я sort.php ;
  • отримувати від інших модулів результати їх роботи у вигляді числової змінної $status та виводити відповідні повідомлення (масив $status_msg). Значення $status , що дорівнює нулю, буде прийнято за умовчанням, йому відповідає висновок короткої довідки про роботу програми;
  • якщо база непуста, показати її записи та забезпечити перехід до редагування чи видалення.

Щоб не перевантажувати таблицю додатковими кнопками та посиланнями, зробимо клацання по іменіпереходом до редагування запису модулем edit.php , а клацання по полю "Число"буде відповідати видалення запису модулем del.php.

Ось як виглядає при кількох доданих записах:

Зовнішній вигляд скрипта "Міні-БД на текстовому файлі"

Файл index.php
Ім'я: Число: Очистити Сортувати"; $status_msg = array ("Клацніть Ім'я для редагування або Число для видалення запису", "Запис вже існує, виправлено значення в ньому", "Не вдалося знайти запис із вказаним номером", "Не передані дані для додавання") ; if (empty($status)) $status = 0;

".$status_msg[$status]."

"; if (count($a)>0) ( echo " "."\n". " "."\n"; foreach ($a as $index=>$item) ( echo " "."\n"; list ($name, $number) = explode (DIV, $item); echo " "."\n". " "."\n". ""."\n"; ) echo "
Ім'яЧисло
".htmlspecialchars(trimall($name))."".intval(trimall($number))."
"."\n"; ) include "foot.php"; ?>

Тепер займемося відсутніми модулями. У add.php, здається, просте завдання - отримати від index.php змінні $name і $number і записати їх у файл. Однак, модуль повинен перевірити, що йому передані непусті дані, а також вміти відрізняти ситуацію, коли введено ім'я, що вже існує в базі, від введення нового запису (див. if ($id>-1) ( ... ) else ( ... ) ) у коді). В останньому випадку запис завжди додається до кінця, адже буде модуль сортування рядків за абеткою.

Також важливо, що рядок $name , "пропущений" через обробник параметрів, вже позбавлений "критичних" для розмітки символів на кшталт ", ",< и >, а в масиві $a , прочитаному з файлу даних, всі рядки лежать "як є", і<>123 не буде знайдено, якщо $name після обробки перетворилася<>123 . Тому функції пошуку запису, названого нами get_index_by_name, передається рядок, перетворений "назад" до початкового вигляду за допомогою стандартної функції htmlspecialchars_decode (доступна з PHP 5.1). У тому ж вигляді рядок повертається назад до index.php через масив $_SESSION . Це забезпечить деяку зручність роботи - після введення нового запису її дані залишаться у формі і можна буде внести ще один запис, що мало відрізняється по імені ("Іванова" після "Іванів").

Ну а саме повернення з модуля в модуль абсолютно типовий - через стандартну функцію header. Пам'ятайте, що її можна використовувати, тільки якщо модуль ще нічого не виводив у браузер.

Файл add.php
-1) ( list ($name, $number0) = explode (DIV, $a[$id]); $a[$id] = $new_string;; $status=1; ) else ( $id = count($ a)+1; $_SESSION["id"] = intval($id); ) else $status = 3; $_SESSION["name"] = htmlspecialchars_decode($name); $_SESSION["number"] = intval($number); header ("Location: index.php".($status==0?"":"?status=".$status)); ?>

Тепер про редагування воно буде реалізовано в edit.php . Форма редагування - майже така сама, як форма додавання, ми просто полінувалися зробити окрему функцію для виведення форми. Важливіше те, що модуль сам буде обробником даних, переданих через форму редагування, а значить повинен відрізняти ситуацію, коли він тільки викликаний, від тієї, коли користувач натиснув "Зберегти". Останнім завданням є перевірка

If (!empty($_POST["submit"]) && !empty($name) && isset($number) && isset($id)) (

визначальна, чи була натиснута кнопка та передані всі дані. Друга гілка -

Else if (isset($a[$id]))) (

призначена для ситуації, коли в масиві $a є запис, номер якого передано скрипту і він має бути відредагований. Номер запису зберігається у прихованому HTML-полі .

Файл edit.php
Ім'я: Число: назад"; include "foot.php"; exit (0); ) else $status = 2; header ("Location: index.php".($status==0?"":"?status=".$status) );

Модуль видалення запису del.php буде досить простим, все, що йому знадобиться – отримати допустимий $id запису (номер елемента в масиві $a), прибрати відповідний елемент із масиву, переписати файл та повернутися на сторінку головного модуля.

Файл del.php

Зрештою, модуль сортування sort.php породить нову проблему - як сортувати рядки в Юнікоді за алфавітом, не розрізняючи великих і маленьких букв? "Пряме" сортування за допомогою стандартної функції sort підійде навряд чи - вона вважає малий і прописну букву різними символами. Локаль ми не ставили, тим більше, для її встановлення єдиної форми запису для всіх операційних систем немає.

Обмежимося тим, що з усього різноманіття функцій сортування масивів виберемо usort з функцією користувача порівняння елементів.

Застосовуване "пряме" порівняння односимвольних рядків Юнікоду, здається, не зовсім коректно, але strcmp порівнює рядки побайтово і нам не підійде, а взагалі коректне порівняння будь-якихрядків в Юнікоді – дуже непросте завдання… У мене для російської та англійської в системі все спрацювало, наприклад, після сортування виходили природні порядки слів, такі як

Абба, Авка, авкліт, бася, Бобі, Бобик, бобіка, Бобіна

Файл sort.php
$cb) return 1; ) if ($alen<$blen) return -1; else if ($alen>$blen) return 1; else return 0; ) usort ($a, "cmp"); write ($a); header ("Location: index.php"); ?>

Нам залишається створити в папці файл з ім'ям.htaccess , де ми пропишемо кодуванням за умовчанням Юнікод і вкажемо директиви налаштування лапок для сайту, щоб ...

У цій папці створимо порожній (0 байт) файл data.txt (необов'язково, якщо всі права налаштовані).

Файл.htaccess
AddDefaultCharset utf-8 php_flag magic_quotes_gpc off php_flag magic_quotes_runtime off php_flag magic_quotes_sybase off

Можете подивитися, що вийшло, і про знайдені проблеми повідомити мене, я написав скрипт дуже оперативно, в 2 прийоми, і міг щось не продумати:)



Подібні публікації