Skip to content

Commit f40c3fc

Browse files
committed
Improve mb_detect_encoding's recognition of Turkish text
Add 4 codepoints commonly used to write Turkish text to our table of 'commonly used' Unicode codepoints. These are: • U+011F LATIN SMALL LETTER G WITH BREVE • U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE • U+0131 LATIN SMALL LETTER DOTLESS I • U+015F LATIN SMALL LETTER S WITH CEDILLA
1 parent ddcbcd1 commit f40c3fc

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

NEWS

+3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ PHP NEWS
4040
- JSON:
4141
. Added json_validate(). (Juan Morales)
4242

43+
- MBString:
44+
. mb_detect_encoding is better able to identify the correct encoding for Turkish text. (Alex Dowad)
45+
4346
- Opcache:
4447
. Added start, restart and force restart time to opcache's
4548
phpinfo section. (Mikhail Galanin)

ext/mbstring/common_codepoints.txt

+3
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
0x0104 0x0107 # Polish
77
0x010C 0x010F # Czech
88
0x0118 0x011B # Polish, Czech
9+
0x011F 0x011F # Turkish
10+
0x0130 0x0131 # Turkish
911
0x0141 0x0144 # Polish
1012
0x0147 0x0148 # Czech
1113
0x0150 0x0151 # Hungarian
1214
0x0158 0x015B # Czech, Polish
15+
0x015F 0x015F # Turkish
1316
0x0160 0x0161 # Used in Slavic names
1417
0x0164 0x0165 # Czech
1518
0x016E 0x016F # Czech

ext/mbstring/rare_cp_bitvec.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
static uint32_t rare_codepoint_bitvec[] = {
1313
0xffffd9ff, 0x00000000, 0x00000000, 0x80000000, 0xffffffff, 0x00002001, 0x00000000, 0x00000000,
14-
0xf0ff0f0f, 0xffffffff, 0xf0fcfe61, 0x81fc3fcc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
14+
0x70ff0f0f, 0xfffcffff, 0x70fcfe61, 0x81fc3fcc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
1515
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
1616
0xfffff800, 0xffffffff, 0xffffffff, 0x0300ffff, 0x0000280f, 0x00000004, 0x00000000, 0x00000000,
1717
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,

ext/mbstring/tests/mb_detect_encoding.phpt

+14
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ $jpEncodings = [
149149
test($jpStrings, $jpEncodings);
150150

151151
$cnStrings = [
152+
// Headline randomly picked from Chinese news
152153
"日本宫内厅宣布,真子公主和小室圭将在10月26日完婚。",
153154
// The Dream of Red Mansions
154155
"此开卷第一回也。作者自云曾历过一番梦幻之后,故将真事隐去,而借“通灵”说此《石头记》一书也",
@@ -312,6 +313,19 @@ test($czechStrings, $czechEncodings);
312313

313314
test([$hungarian], ['UTF-8', 'UTF-16', 'Windows-1252']);
314315

316+
$turkishStrings = [
317+
// Random junk indiscriminately copied from randomly picked Wikipedia articles
318+
"Samsun 19 Mayıs Stadyumu, Samsun'un Tekkeköy ilçesinde bulunan akıllı çok amaçlı stadyumdur. 33.919 koltuk kapasitesiyle Samsunspor'un iç saha maçlarına ev sahipliği yapmaktadır. Toplu Konut İdaresi tarafından yaptırılan ve 2017'de tamamlanan stadyum adını Mustafa Kemal'in Samsun'a çıktığı gün olan 19 Mayıs'tan almaktadır. İlk olarak Nisan 2011'de duyurulan proje 3 Aralık 2012'de Toplu Konut İdaresince yapılan ve Ali Acar İnşaat'ın kazandığı ihale ile resmiyete dökülmüş, 4 Ağustos 2013 tarihindeki temel atma töreni ile de inşa aşamasına geçilmiştir. İnşaatın başlangıç tarihinden itibaren en geç 800 gün içerisinde tamamlanması taahhüt edilse de UEFA'nın standartlarına uyum sağlamak için projede yenileme yapılması, çatının inşasıyla sorumlu şirketin iflas etmesi gibi sebeplerle tamamlanma süresi birkaç kez sarkmıştır. Bu bağlamda, ilk etapta 2014-15 sezonunda hazır hâle geleceği açıklanan stadyumun açılışı önce 2015-16, daha sonra 2016-17 sezonu başına ertelense de bu hedefler de yakalanamamıştır.",
319+
"Lütf-i Celil (Osmanlı Türkçesi: ﻟﻄﻒ ﺟﻠﻴﻞ Anlamı: \"İlahi Lütuf\"), Osmanlı Donanması'nın Lütf-i Celil sınıfının öncü gemisi olan zırhlı savaş gemisidir. Başlangıçta Osmanlı İmparatorluğu'na bağlı özerk bir devlet olan Mısır Hidivliği tarafından sipariş edilen Lütf-i Celil, Osmanlı hükûmetinin Mısır'ı gemiyi teslim etmeye zorlaması ile Fransa'daki Forges et Chantiers de la Gironde tersanesinde yapım aşamasındayken Osmanlılara devredildi. Lütf-i Celil, 1877'de 93 Harbi sırasında aktif görevde bulundu ve Rus güçlerinin Tuna'yı geçmesini önlemek için operasyonlarda bulundu. 11 Mayıs'ta devriye gezerken bir Rus topçu bataryasıyla çatışmaya girdi.",
320+
"Çoğu tarihçinin kanısına göre, ABD'nin üçüncü başkanı Jefferson, karısının ölümünün ardından kölesi Sally Hemings ile 38 yıl süren ilişkisi sırasında onun altı çocuğunun babası olmuştur.",
321+
"2011 İran drama filmi Bir Ayrılık, 61. Berlin Film Festivali'nde Altın Ayı kazanarak, bu ödülü alan ilk İran filmi oldu.",
322+
"Josef Bringas, isyan eden general Nikiforos Fokas'a karşı Konstantinopolis'e birlikler getirdi; asilerin Boğaziçi'ni geçmelerini engellemek için tüm gemileri tuttu; Nikiforos'un babası Bardas'ı rehin aldı ama başarılı olamadı."
323+
];
324+
// ISO-8859-9 and Windows-1254 are very similar and we can't really distinguish them from each other
325+
// But both of them should be distinguishable from UTF-8
326+
test($turkishStrings, ['UTF-8', 'UTF-16', 'ISO-8859-9']);
327+
test($turkishStrings, ['UTF-8', 'Windows-1254']);
328+
315329
echo "Done!\n";
316330

317331
?>

0 commit comments

Comments
 (0)