Van ë naar e, Ö naar O, enz
Wat is de makkelijkste manier om de trema's (ë Ë), streepjes (é È) weg te halen, dus dat je gewoon krijgt e of E. Dit is alleen een voorbeeld met de letter e, maar het betreft ook met een o, u, y, i, a.
Ik heb zelf al gekeken naar ereg_replace en preg_replace, maar kon daarmee niet uit de voeten om iets makkelijks te maken.
Of moet ik het echt zo doen?
Code (php)
1
2
3
4
2
3
4
<?php
$data = str_replace(array('ë', 'ï', ' '), array('e', 'i', ' '), $data);
//enz
?>
$data = str_replace(array('ë', 'ï', ' '), array('e', 'i', ' '), $data);
//enz
?>
Ik heb namelijk een SAX parser gemaakt die xml documenten omzet in bruikbare tekst, maar hij doet gek bij ë, ä, Ë, & enz.
Als ik iets met htmlentities / -specialchars wil doen krijg ik een xml foutmelding
XML error: Empty document at line 1
Oeps geef je eigenlijk dezelfde functie als je zelf had, maar dan iets anders.. :)
Elwin
Gewijzigd op 21/03/2006 11:26:00 door Elwin - Fratsloos
@SanThe
Ik had inderdaad ook al naar strtr gekeken, maar dan moet ik nog steeds alles met de hand veranderen. Ik heb nu dus:
$trans = array(
'ë' => 'e',
'Ë' => 'E',
'ö' => 'o',
'Ö' => 'O'
);
$data = strtr($data, $trans);
Maar is er geen makkelijkere manier? Alleen al om die hoofdlettergevoeligheid eruit te halen, dus dat ik geen onderscheid hoef te maken met e en E. Met strtolower maakt hij mij $data ook klein en dat wil ik liever niet.
Code (php)
1
2
3
2
3
<?
str_replace("\"", """, str_replace("'", "'", htmlspecialchars(htmlentities($data))));
?>
str_replace("\"", """, str_replace("'", "'", htmlspecialchars(htmlentities($data))));
?>
XML error: Empty document at line 1
De reden dat ik die " en ' wil verwijderen is dat de SAX-parser bijvoorbeeld het woord financiën splitst in:
financi
ën
Het is mij een raadsel waarom? Net als de &
Dus van:
Veel gestelde vragen & glossary
Maakt hij:
Veel gestelde vragen
&
glossary
Als daar een oplossing voor bestaat ben ik helemaal blij.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$trans = array(
'ë' => 'e', 'Ë' => 'E', 'é' => 'e', 'É' => 'E', 'è' => 'e', 'È' => 'E', 'ê' => 'e', 'Ê' => 'E',
'ö' => 'o', 'Ö' => 'O', 'ó' => 'o', 'Ó' => 'O', 'ò' => 'o', 'Ò' => 'O', 'ô' => 'o', 'Ô' => 'O', 'õ' => 'o', 'Õ' => 'O',
'ï' => 'i', 'Ï' => 'I', 'í' => 'i', 'Í' => 'I', 'ì' => 'i', 'Ì' => 'I', 'î' => 'i', 'Î' => 'I',
'ä' => 'a', 'Ä' => 'A', 'á' => 'a', 'Á' => 'A', 'à' => 'a', 'À' => 'A', 'â' => 'a', 'Â' => 'A', 'ã' => 'a', 'Ã' => 'A',
'ü' => 'u', 'Ü' => 'U', 'ú' => 'u', 'Ú' => 'U', 'ù' => 'u', 'Ù' => 'U', 'û' => 'u', 'Û' => 'U',
'ÿ' => 'y', 'ý' => 'y', 'Ý' => 'Y',
' ' => ' ',
'&' => 'en',
'<' => ' ',
'>' => ' ',
'"' => '"',
);
$data = strtr($data, $trans);
?>
$trans = array(
'ë' => 'e', 'Ë' => 'E', 'é' => 'e', 'É' => 'E', 'è' => 'e', 'È' => 'E', 'ê' => 'e', 'Ê' => 'E',
'ö' => 'o', 'Ö' => 'O', 'ó' => 'o', 'Ó' => 'O', 'ò' => 'o', 'Ò' => 'O', 'ô' => 'o', 'Ô' => 'O', 'õ' => 'o', 'Õ' => 'O',
'ï' => 'i', 'Ï' => 'I', 'í' => 'i', 'Í' => 'I', 'ì' => 'i', 'Ì' => 'I', 'î' => 'i', 'Î' => 'I',
'ä' => 'a', 'Ä' => 'A', 'á' => 'a', 'Á' => 'A', 'à' => 'a', 'À' => 'A', 'â' => 'a', 'Â' => 'A', 'ã' => 'a', 'Ã' => 'A',
'ü' => 'u', 'Ü' => 'U', 'ú' => 'u', 'Ú' => 'U', 'ù' => 'u', 'Ù' => 'U', 'û' => 'u', 'Û' => 'U',
'ÿ' => 'y', 'ý' => 'y', 'Ý' => 'Y',
' ' => ' ',
'&' => 'en',
'<' => ' ',
'>' => ' ',
'"' => '"',
);
$data = strtr($data, $trans);
?>
Lang leve DOM :D, dan had ik dit probleem niet gehad. Maar mijn host ondersteund geen php5.