Регулярний вираз не враховує символи UTF-8 за замовчуванням. \s
Мета-символ рахунок тільки для оригінального латинського набору. Отже, наступна команда видаляє лише вкладки, пробіли, повернення каретки та нові рядки
$str=preg_replace('/\s+/', '', $str);
Коли UTF-8 стане основним, цей вираз частіше виходить з ладу / зупиняється, коли досягає нових символів utf-8, залишаючи пробіли позаду, що \s
неможливо врахувати.
Щоб мати справу з новими типами пробілів, введеними в unicode / utf-8, потрібен більш обширний рядок, який відповідає і видаляє сучасний пробіл.
Оскільки регулярні вирази за замовчуванням не розпізнають багатобайтові символи, для їх ідентифікації можна використовувати лише розділений мета-рядок, щоб запобігти змінам сегментів байтів в інших символах utf-8 ( \x80
у наборі чотирьох символів може замінити всі \x80
підбайти у розумних цитатах)
$cleanedstr = preg_replace(
"/(\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf)+/",
"_",
$str
);
Це враховує та видаляє вкладки, нові рядки, вертикальні вкладки, подачі форми, повернення каретки, пробіли та додатково звідси :
наступний рядок, нерозривні пробіли, монгольський роздільник голосних, [en quad, em quad, en space, em space, простір на три символи, пробіл на чотири символи, простір на шість символів, простір фігур, розділові знаки , тонкий простір, простір для волосся, простір нульової ширини, столяр нульової ширини, столяр нульової ширини], роздільник рядків, роздільник абзаців, вузький пробіл без розривів, середній математичний простір, столяр слова, ідеографічний простір та нульова ширина не- розриву простору.
Багато з них спричиняють хаос у файлах xml під час експорту з автоматизованих інструментів або сайтів, які заважають пошуку тексту, розпізнаванню та можуть бути невидимо вставлені у вихідний код PHP, що змушує синтаксичний аналізатор перейти до наступної команди (розділювачі абзаців та рядків), яка викликає рядки коду, який слід пропустити, що призводить до періодичних, незрозумілих помилок, які ми почали називати "захворюваннями, що передаються по тексту"
[Більше не безпечно копіювати та вставляти з Інтернету. Використовуйте сканер символів, щоб захистити свій код. Лол]