Van ë naar e, Ö naar O, enz
Beste allen,
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?
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
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
Gesponsorde koppelingen:
Edit:
Oeps geef je eigenlijk dezelfde functie als je zelf had, maar dan iets anders.. :)
Elwin
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
Bedankt voor de reacties.
@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.
@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.
Probeer dit eens:
Code (php)
1
2
3
2
3
<?
str_replace("\"", """, str_replace("'", "'", htmlspecialchars(htmlentities($data))));
?>
str_replace("\"", """, str_replace("'", "'", htmlspecialchars(htmlentities($data))));
?>
Dan krijg ik nog de xml fout
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.
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.
Uit pure wanhoop heb ik er maar dit van gemaakt
Lang leve DOM :D, dan had ik dit probleem niet gehad. Maar mijn host ondersteund geen php5.
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.



