Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

PHP Cookbook: Expanding and Compressing Tabs

Posted on February 18, 2012

Problem
You want to change spaces to tabs (or tabs to spaces) in a string while keeping text aligned with tab stops. For example, you want to display formatted text to users in a standardized way.

Solution
Use str_replace( ) to switch spaces to tabs or tabs to spaces, as shown in Example
1-22.
Example 1-22. Switching tabs and spaces
[sourcecode language=”php”]<?php
$r = mysql_query("SELECT message FROM messages WHERE id = 1") or die();
$ob = mysql_fetch_object($r);
$tabbed = str_replace(‘ ‘,"\t",$ob->message);
$spaced = str_replace("\t",’ ‘,$ob->message);
print "With Tabs: <pre>$tabbed</pre>";
print "With Spaces: <pre>$spaced</pre>";
?>[/sourcecode]

Using str_replace( ) for conversion, however, doesn’t respect tab stops. If you want tab stops every eight characters, a line beginning with a five-letter word and a tab should have that tab replaced with three spaces, not one. Use the pc_tab_expand( ) function shown in Example 1-23 into turn tabs to spaces in a way that respects tab stops.

Example 1-23. pc_tab_expand( )
[sourcecode language=”php”]<?php
function pc_tab_expand($text) {
while (strstr($text,"\t")) {
$text = preg_replace_callback(‘/^([^\t\n]*)(\t+)/m’,’pc_tab_expand_helper’, $text);
}
return $text;
}
function pc_tab_expand_helper($matches) {
$tab_stop = 8;
return $matches[1] .
str_repeat(‘ ‘,strlen($matches[2]) *
$tab_stop – (strlen($matches[1]) % $tab_stop));
}
$spaced = pc_tab_expand($ob->message);
?>
[/sourcecode]

You can use the pc_tab_unexpand( ) function shown in Example 1-24 to turn spaces back to tabs.

Example 1-24. pc_tab_unexpand( )
[sourcecode language=”php”]
<?php
function pc_tab_unexpand($text) {
$tab_stop = 8;
$lines = explode("\n",$text);
foreach ($lines as $i => $line) {
// Expand any tabs to spaces
$line = pc_tab_expand($line);
$chunks = str_split($line, $tab_stop);
$chunkCount = count($chunks);
// Scan all but the last chunk
for ($j = 0; $j < $chunkCount – 1; $j++) {
$chunks[$j] = preg_replace(‘/ {2,}$/’,"\t",$chunks[$j]);
}
// If the last chunk is a tab-stop’s worth of spaces
// convert it to a tab; Otherwise, leave it alone
if ($chunks[$chunkCount-1] == str_repeat(‘ ‘, $tab_stop)) {
$chunks[$chunkCount-1] = "\t";
}
// Recombine the chunks
$lines[$i] = implode(”,$chunks);
}
// Recombine the lines
return implode("\n",$lines);
}
$tabbed = pc_tab_unexpand($ob->message);
?>
[/sourcecode]

Both functions take a string as an argument and return the string appropriately modified.

Discussion
Each function assumes tab stops are every eight spaces, but that can be modified by changing the setting of the $tab_stop variable.

The regular expression in pc_tab_expand( ) matches both a group of tabs and all the text in a line before that group of tabs. It needs to match the text before the tabs because the length of that text affects how many spaces the tabs should be replaced with so that
subsequent text is aligned with the next tab stop. The function doesn’t just replace each tab with eight spaces; it adjusts text after tabs to line up with tab stops.

Similarly, pc_tab_unexpand( ) doesn’t just look for eight consecutive spaces and then replace them with one tab character. It divides up each line into eight-character chunks and then substitutes ending whitespace in those chunks (at least two spaces) with tabs. This not only preserves text alignment with tab stops; it also saves space in the string.

See Also
Documentation on str_replace( ) at http://www.php.net/str-replace, on preg_replace_callback( ) at http://www.php.net/preg_replace_callback, and on str_split( ) at http://www.php.net/str_split. Recipe 22.10 has more information on
preg_replace_callback( ) .

Terbaru

  • Bahaya Hacking Dibalik No WA Duda Mapan Cari Jodoh Istri Pengusaha Kaya Raya yang Serius
  • Apa arti Kota Penerbit Identitas di Bank BNI?
  • Apakah Bank Saqu Astra Aman atau Penipuan?
  • Apakah Platform Amalan.id Penipu?
  • Apa itu Rekening Pasif di Bank BRI? Apa Resikonya?
  • Apa Arti Kode ‘Bunga Rekening’ di Mutasi Rekening Bank BRI?
  • Apa itu BRI Nex Card? Keuntungan, Fitur, dan Cara Daftarnya
  • Cara Mudah Membuat Rate Card dengan AI Tahun 2026
  • Cara Memperbaiki Glance Error di OnePlus 13
  • Apakah Langkah Open-source dari X Ancam Akun Anonim?
  • Kenapa Hewan Tidak Punya Klorofil?
  • Apa itu Kegiatan Review dan Pengertian Review
  • Bulgaria Lumpuhkan Situs Pembajakan Streaming & Game, AS Ikut Campur!
  • Apa itu Google Analytics 4?
  • Cara Cek Status DTSEN Terbaru, DTSEN Jadi Penentu Bansos PKH & BPNT 2026
  • Nvidia GeForce Now Resmi di Linux!
  • Kode Redeem Blade Ball Roblox Terbaru 1 Februari 2026: Raih Hadiah Spesialmu!
  • Kode Paket Internet Indosat Murah Terbaru 2026: Kuota 25GB Cuma 50 Ribu?
  • AFK Fishing Roblox: Auto Panen Ikan 24 Jam Pakai CC Cloud Phone!
  • Rahasia Meta AI WhatsApp: Cara Ampuh Dapat Cuan dari Chatbot!
  • Gokil! Case Pixel Diskon 90% di Verizon, Buruan Sikat!
  • Apakah APK CashCepat Penipu? Ada Izin Pinjol OJK?
  • Lowongan Kerja Leader di BRI Melalui BFLP Specialist 2026, Cek Syarat Lengkapnya Di Sini!
  • Inilah Cara Ajukan KUR BSI 2026 yang Cair Hingga 500 Juta Tanpa Riba!
  • Ini Trik Supaya Pengajuan KUR BRI 2026 Kalian Cepat Disetujui!
  • Inilah Cara Mengenali Gejala Virus Nipah dan Langkah Pencegahannya
  • Spesifikasi Minimal PC untuk Game Arknights: Endfield
  • Apa itu Pengertian RSVP?
  • Inilah Kode Warna Emas/Gold di Canva
  • Ini Trik Supaya CCTV 24 Jam Nggak Bikin Kantong Jebol Karena Kuota dan Listrik!
  • Spotify Introduces Group Chat Feature: Sharing Music and Podcasts with Friends Directly
  • Microsoft Will Fix Windows 11 Performance and User Experience Issues in 2026
  • Windows 11 KB5074105 Update Explained
  • Windows 11 Start Menu Resize Issues Explained
  • Definitely Not Fried Chicken Game Explained
  • Cara Membuat Podcast dari PDF dengan NotebookLlama dan Groq
  • Tutorial Membuat Sistem Automatic Content Recognition (ACR) untuk Deteksi Logo
  • Apa itu Google Code Wiki?
  • Cara Membuat Agen AI Otomatis untuk Laporan ESG dengan Python dan LangChain
  • Cara Membuat Pipeline RAG dengan Framework AutoRAG
  • Apa itu Spear-Phishing via npm? Ini Pengertian dan Cara Kerjanya yang Makin Licin
  • Apa Itu Predator Spyware? Ini Pengertian dan Kontroversi Penghapusan Sanksinya
  • Mengenal Apa itu TONESHELL: Backdoor Berbahaya dari Kelompok Mustang Panda
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV

©2026 emka.web.id | Design: Newspaperly WordPress Theme