3v4l.org

run code in 300+ PHP versions simultaneously
<?php function seems_utf8($str) { $length = strlen($str); for ($i = 0; $i < $length; $i++) { $c = ord($str[$i]); if ($c < 0x80) $n = 0; elseif (($c & 0xE0) == 0xC0) $n = 1; elseif (($c & 0xF0) == 0xE0) $n = 2; elseif (($c & 0xF8) == 0xF0) $n = 3; elseif (($c & 0xFC) == 0xF8) $n = 4; elseif (($c & 0xFE) == 0xFC) $n = 5; else return false; for ($j=0; $j<$n; $j++) { if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false; } } return true; } function remove_accents($string) { if (!preg_match('/[\x80-\xff]/', $string)) return $string; if (seems_utf8($string)) { $chars = array( // Decompositions for Latin-1 Supplement chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', chr(195).chr(159) => 's', chr(195).chr(160) => 'a', chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', chr(195).chr(191) => 'y', // Decompositions for Latin Extended-A chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', chr(197).chr(154) => 'S',chr(197).chr(155) => 's', chr(197).chr(156) => 'S',chr(197).chr(157) => 's', chr(197).chr(158) => 'S',chr(197).chr(159) => 's', chr(197).chr(160) => 'S', chr(197).chr(161) => 's', chr(197).chr(162) => 'T', chr(197).chr(163) => 't', chr(197).chr(164) => 'T', chr(197).chr(165) => 't', chr(197).chr(166) => 'T', chr(197).chr(167) => 't', chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', chr(197).chr(190) => 'z', chr(197).chr(191) => 's', // Euro Sign chr(226).chr(130).chr(172) => 'E', // GBP (Pound) Sign chr(194).chr(163) => '', ); $string = strtr($string, $chars); } else { // Assume ISO-8859-1 if not UTF-8 $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) .chr(252).chr(253).chr(255); $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; $string = strtr($string, $chars['in'], $chars['out']); $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); $string = str_replace($double_chars['in'], $double_chars['out'], $string); } return $string; } var_dump( remove_accents("aťszgťščd") == "aťszgťščd" );

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0120.00318.43
8.3.50.0110.00718.33
8.3.40.0130.01019.30
8.3.30.0100.00719.22
8.3.20.0040.00419.27
8.3.10.0080.00022.01
8.3.00.0040.00423.68
8.2.180.0120.00318.73
8.2.170.0120.00322.96
8.2.160.0140.00719.49
8.2.150.0060.00324.18
8.2.140.0050.00324.66
8.2.130.0080.00021.17
8.2.120.0050.00326.35
8.2.110.0080.00422.25
8.2.100.0090.00318.16
8.2.90.0040.00418.59
8.2.80.0030.00618.41
8.2.70.0060.00318.30
8.2.60.0030.00618.47
8.2.50.0080.00018.18
8.2.40.0030.00621.15
8.2.30.0050.00519.47
8.2.20.0080.00018.35
8.2.10.0000.00818.30
8.2.00.0040.00419.61
8.1.280.0070.01025.92
8.1.270.0000.00822.16
8.1.260.0060.00326.35
8.1.250.0040.00428.09
8.1.240.0060.01222.32
8.1.230.0060.00621.16
8.1.220.0000.00818.02
8.1.210.0090.00318.77
8.1.200.0000.00917.72
8.1.190.0030.00517.60
8.1.180.0080.00018.10
8.1.170.0000.00819.19
8.1.160.0000.00919.05
8.1.150.0000.00919.05
8.1.140.0070.00017.95
8.1.130.0000.00719.15
8.1.120.0050.00217.83
8.1.110.0030.00617.81
8.1.100.0030.00617.89
8.1.90.0040.00417.82
8.1.80.0040.00417.80
8.1.70.0060.00317.84
8.1.60.0030.00617.99
8.1.50.0080.00517.93
8.1.40.0080.00017.86
8.1.30.0030.00517.96
8.1.20.0030.00817.97
8.1.10.0040.00417.93
8.1.00.0030.00517.83
8.0.300.0000.00820.02
8.0.290.0040.00417.12
8.0.280.0000.00718.70
8.0.270.0040.00417.50
8.0.260.0000.00817.49
8.0.250.0000.00817.28
8.0.240.0000.00817.35
8.0.230.0080.00017.29
8.0.220.0020.00517.23
8.0.210.0030.00317.26
8.0.200.0030.00317.30
8.0.190.0090.00017.23
8.0.180.0030.00517.30
8.0.170.0000.00817.26
8.0.160.0030.00617.28
8.0.150.0030.00617.25
8.0.140.0040.00417.11
8.0.130.0000.00713.62
8.0.120.0040.00417.14
8.0.110.0040.00417.32
8.0.100.0040.00417.24
8.0.90.0030.00517.23
8.0.80.0100.00917.21
8.0.70.0050.00317.07
8.0.60.0040.00417.13
8.0.50.0040.00417.21
8.0.30.0110.01017.64
8.0.20.0100.01017.56
8.0.10.0030.00517.26
8.0.00.0070.01117.01
7.4.330.0000.00515.55
7.4.320.0020.00516.80
7.4.300.0000.00817.08
7.4.290.0030.00317.07
7.4.280.0040.00416.93
7.4.270.0000.00716.84
7.4.260.0000.00716.89
7.4.250.0060.00316.96
7.4.240.0000.00817.09
7.4.230.0070.00017.06
7.4.220.0030.00517.04
7.4.210.0090.00816.91
7.4.200.0040.00416.84
7.4.160.0060.01116.96
7.4.140.0110.01117.86
7.4.130.0130.01316.98
7.4.120.0100.01416.92
7.4.110.0060.01216.98
7.4.100.0110.00716.84
7.4.90.0090.00916.85
7.4.80.0120.00619.39
7.4.70.0060.01217.05
7.4.60.0080.00817.00
7.4.50.0150.00317.02
7.4.40.0030.01417.11
7.4.00.0030.01315.48
7.3.330.0030.00313.70
7.3.320.0000.00613.67
7.3.310.0040.00416.50
7.3.300.0000.00816.75
7.3.290.0040.00416.73
7.3.280.0080.00716.68
7.3.260.0100.01216.79
7.3.240.0080.01116.77
7.3.230.0160.00316.89
7.3.210.0090.01517.06
7.3.200.0110.00716.57
7.3.190.0130.00916.80
7.3.180.0090.00916.75
7.3.170.0080.00816.79
7.3.160.0070.01016.74
7.3.120.0100.01014.86
7.3.110.0080.00815.07
7.3.100.0030.01015.16
7.3.90.0000.01214.86
7.3.80.0070.00715.49
7.3.70.0060.00815.30
7.3.60.0000.00915.27
7.3.50.0130.00015.09
7.3.40.0120.00315.36
7.3.30.0120.00315.26
7.3.20.0080.00816.61
7.3.10.0050.00816.75
7.3.00.0030.00816.93
7.2.330.0090.01516.93
7.2.320.0070.01717.02
7.2.310.0160.01017.15
7.2.300.0070.01716.95
7.2.290.0100.01316.91
7.2.250.0170.00015.66
7.2.240.0100.01015.34
7.2.230.0090.00615.64
7.2.220.0030.00615.43
7.2.210.0030.00915.55
7.2.200.0040.01415.42
7.2.190.0040.01215.52
7.2.180.0070.01015.54
7.2.170.0100.00715.41
7.2.160.0070.01115.36
7.2.150.0060.00617.13
7.2.140.0040.01117.14
7.2.130.0020.01117.11
7.2.120.0050.00917.17
7.2.110.0050.01117.05
7.2.100.0050.01017.21
7.2.90.0050.01017.21
7.2.80.0060.01017.03
7.2.70.0100.01016.54
7.2.60.0110.01316.58
7.2.50.0110.00916.54
7.2.40.0100.00816.51
7.2.30.0160.00416.51
7.2.20.0360.00916.55
7.2.10.0100.01016.63
7.2.00.0140.01016.52
7.1.330.0090.00615.99
7.1.320.0090.00616.23
7.1.310.0000.01515.93
7.1.300.0110.00016.13
7.1.290.0060.00616.20
7.1.280.0070.01316.04
7.1.270.0000.01415.84
7.1.260.0040.01216.06
7.1.250.0000.01316.12
7.1.200.0000.01316.02
7.1.170.0180.01114.54
7.1.160.0220.00614.34
7.1.150.0260.00314.36
7.1.140.0210.01014.35
7.1.130.0240.00714.30
7.1.120.0360.00014.37
7.1.110.0280.00314.45
7.1.100.0250.00614.22
7.1.90.0270.00314.25
7.1.80.0270.00314.13
7.1.70.0190.01014.38
7.1.60.0360.01332.11
7.1.50.0480.00332.14
7.1.40.0470.00332.44
7.1.30.0450.00632.26
7.1.20.0370.01032.14
7.1.10.0180.01114.19
7.1.00.0160.01314.35

preferences:
61.41 ms | 401 KiB | 5 Q