Skip to content

Commit

Permalink
Improve mb_detect_encoding's recognition of Turkish text
Browse files Browse the repository at this point in the history
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
  • Loading branch information
alexdowad committed Dec 30, 2022
1 parent ddcbcd1 commit f40c3fc
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 1 deletion.
3 changes: 3 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ PHP NEWS
- JSON:
. Added json_validate(). (Juan Morales)

- MBString:
. mb_detect_encoding is better able to identify the correct encoding for Turkish text. (Alex Dowad)

- Opcache:
. Added start, restart and force restart time to opcache's
phpinfo section. (Mikhail Galanin)
Expand Down
3 changes: 3 additions & 0 deletions ext/mbstring/common_codepoints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
0x0104 0x0107 # Polish
0x010C 0x010F # Czech
0x0118 0x011B # Polish, Czech
0x011F 0x011F # Turkish
0x0130 0x0131 # Turkish
0x0141 0x0144 # Polish
0x0147 0x0148 # Czech
0x0150 0x0151 # Hungarian
0x0158 0x015B # Czech, Polish
0x015F 0x015F # Turkish
0x0160 0x0161 # Used in Slavic names
0x0164 0x0165 # Czech
0x016E 0x016F # Czech
Expand Down
2 changes: 1 addition & 1 deletion ext/mbstring/rare_cp_bitvec.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

static uint32_t rare_codepoint_bitvec[] = {
0xffffd9ff, 0x00000000, 0x00000000, 0x80000000, 0xffffffff, 0x00002001, 0x00000000, 0x00000000,
0xf0ff0f0f, 0xffffffff, 0xf0fcfe61, 0x81fc3fcc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0x70ff0f0f, 0xfffcffff, 0x70fcfe61, 0x81fc3fcc, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
0xfffff800, 0xffffffff, 0xffffffff, 0x0300ffff, 0x0000280f, 0x00000004, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
Expand Down
14 changes: 14 additions & 0 deletions ext/mbstring/tests/mb_detect_encoding.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ $jpEncodings = [
test($jpStrings, $jpEncodings);

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

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

$turkishStrings = [
// Random junk indiscriminately copied from randomly picked Wikipedia articles
"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.",
"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.",
"Ç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.",
"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.",
"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ı."
];
// ISO-8859-9 and Windows-1254 are very similar and we can't really distinguish them from each other
// But both of them should be distinguishable from UTF-8
test($turkishStrings, ['UTF-8', 'UTF-16', 'ISO-8859-9']);
test($turkishStrings, ['UTF-8', 'Windows-1254']);

echo "Done!\n";

?>
Expand Down

0 comments on commit f40c3fc

Please sign in to comment.