preg_replace á, é enz.
Ik ben niet zo'n kei met reguliere expressies, maar ik wil dus als er een letter met een acute grave of trema in een woord voorkomt dit vervangen daar de 'gewone letter. Dus bv café wordt cafe, en máár wordt maar. Kan dit in één preg_replace voor alle letters?
Maar ik denk dat ik de oplossing al heb. laat het zo weten :-)
strtr voor gebruiken:
PS: Ik weet niet welke methode sneller is, zou je even moeten testen met PHPbench (beetje reclame maken :D)
Ik zou er eerder Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
$str = 'Çàfétârïá';
$characters = Array(
'Ç' => 'C',
'ç' => 'c',
'À' => 'A',
'à' => 'a',
'Á' => 'A',
'á' => 'a',
'Ä' => 'A',
'ä' => 'a',
'Â' => 'A',
'â' => 'a',
'È' => 'E',
'è' => 'e',
'É' => 'E',
'é' => 'e',
'Ë' => 'E',
'ë' => 'e',
'Ê' => 'E',
'ê' => 'e',
'Ì' => 'I',
'ì' => 'i',
'Í' => 'I',
'í' => 'i',
'Ï' => 'I',
'ï' => 'i',
'Î' => 'I',
'î' => 'i',
);
$str = strtr($str, $characters);
echo $str;
?>
$str = 'Çàfétârïá';
$characters = Array(
'Ç' => 'C',
'ç' => 'c',
'À' => 'A',
'à' => 'a',
'Á' => 'A',
'á' => 'a',
'Ä' => 'A',
'ä' => 'a',
'Â' => 'A',
'â' => 'a',
'È' => 'E',
'è' => 'e',
'É' => 'E',
'é' => 'e',
'Ë' => 'E',
'ë' => 'e',
'Ê' => 'E',
'ê' => 'e',
'Ì' => 'I',
'ì' => 'i',
'Í' => 'I',
'í' => 'i',
'Ï' => 'I',
'ï' => 'i',
'Î' => 'I',
'î' => 'i',
);
$str = strtr($str, $characters);
echo $str;
?>
PS: Ik weet niet welke methode sneller is, zou je even moeten testen met PHPbench (beetje reclame maken :D)
Edit:
Ben benieuwd...
Gewijzigd op 29/02/2012 15:13:26 door Wouter J
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$patterns = array('/(á)|(à)|(ä)/', '/(é)|(è)|(ë)/', '/ç/', '/(í)|(ì)|(ï)/', '/(ó)|(ò)|(ö)/', '/(ú)|(ù)|(ü)/');
$replacements = array('a', 'e', 'c', 'i', 'o', 'u');
$starttime = microtime();
$test = 'çáfétàríä ïn üdënhòút';
$test = preg_replace($patterns, $replacements, $test);
echo microtime() - $starttime;
echo '<br>' . $test;
?>
$patterns = array('/(á)|(à)|(ä)/', '/(é)|(è)|(ë)/', '/ç/', '/(í)|(ì)|(ï)/', '/(ó)|(ò)|(ö)/', '/(ú)|(ù)|(ü)/');
$replacements = array('a', 'e', 'c', 'i', 'o', 'u');
$starttime = microtime();
$test = 'çáfétàríä ïn üdënhòút';
$test = preg_replace($patterns, $replacements, $test);
echo microtime() - $starttime;
echo '<br>' . $test;
?>
Output:
7.4999999999992E-5
cafetaria in udenhout
Als ik mag raten: +100, lol
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$cats = array(array('dutchwords.txt', 'Nederlandse taal'), array('germanwords.txt', 'Duitse taal'), array('_artist.txt', 'Muziek'));
$patterns = array('/Á|À|Ä|Â|Ã/', '/É|È|Ë|Ê/', '/Ç/', '/Í|Ì|Ï|Î/', '/Ó|Ò|Ö|Ô|Õ/', '/Ú|Ù|Ü|Û/', '/ß/');
$replacements = array('A', 'E', 'C', 'I', 'O', 'U', 'SS');
$randcat = rand(0, 2);
$words = file($cats[$randcat][0]);
$random = rand(0, count($words)-1);
$orgWord = mb_convert_encoding(mb_strtoupper(trim($words[$random]), 'ISO-8859-1'), 'UTF-8', 'ISO-8859-1');
$comWord = preg_replace($patterns, $replacements, $orgWord);
echo ("orgWord=" . $orgWord . "&comWord=" . $comWord . "&cat=" . urlencode($cats[$randcat][1]));
?>
$cats = array(array('dutchwords.txt', 'Nederlandse taal'), array('germanwords.txt', 'Duitse taal'), array('_artist.txt', 'Muziek'));
$patterns = array('/Á|À|Ä|Â|Ã/', '/É|È|Ë|Ê/', '/Ç/', '/Í|Ì|Ï|Î/', '/Ó|Ò|Ö|Ô|Õ/', '/Ú|Ù|Ü|Û/', '/ß/');
$replacements = array('A', 'E', 'C', 'I', 'O', 'U', 'SS');
$randcat = rand(0, 2);
$words = file($cats[$randcat][0]);
$random = rand(0, count($words)-1);
$orgWord = mb_convert_encoding(mb_strtoupper(trim($words[$random]), 'ISO-8859-1'), 'UTF-8', 'ISO-8859-1');
$comWord = preg_replace($patterns, $replacements, $orgWord);
echo ("orgWord=" . $orgWord . "&comWord=" . $comWord . "&cat=" . urlencode($cats[$randcat][1]));
?>
Of je stopt ze beiden in dezelfde array, dat scheelt weer van dat gecodeer.
Jacco, het converten van de encoding is nodig omdat anders de preg_replace niet goed werkt.
Zorg dat je altijd met dezelfde encodering werkt (bijv. UTF-8) dan kun je ook makkelijker ASCII tabellen raadplegen en zoeken op hex waardes (daar zijn die tabellen erg handig in)
Dat scheelt enorm qua uitzoek werk.