speciale tekend omzetten naar html entity nummers
http://www.mofert.nl/rss2.php
Is er een functie voor het omzetten van speciale tekens in entity nummers of moet ik zelf een functie maken?.
Ik heb een probleem met mijn rss-feed. Het probleem zit `m erin dat niet alle entity namen worden herkend door de xml-parser. Kijk maar eens naar Is er een functie voor het omzetten van speciale tekens in entity nummers of moet ik zelf een functie maken?.
$rss = htmlspecialchars($rss);
:)
Het probleem is dat ik entity nummers moet hebben i.p.v. intity namen. Bijvoorbeeld "Ó" i.p.v. "Ó"
Nee, ik moet een complete teks met speciale tekens om kunnen zetten naar dezelfde tekst, maar dan de speciale tekens omgezet naar nummer-entity. Dus ongeveer hetzelfde al htmlentities(), maar dan anders.
Ik ben ff aan het zoeken voor je.
deze pagina. Hier doe ik dit:
Kijk eens op Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// nummers opzoeken voor entities
$str = get_html_translation_table (HTML_ENTITIES);
$str = array_flip ($str);
foreach ($str as $key => $value) {
$ord = ord ($value);
echo '<p>key: ' . $key . ', value: ' . $value . ', ord: ' . $ord . '</p>';
echo "\n";
}
?>
// nummers opzoeken voor entities
$str = get_html_translation_table (HTML_ENTITIES);
$str = array_flip ($str);
foreach ($str as $key => $value) {
$ord = ord ($value);
echo '<p>key: ' . $key . ', value: ' . $value . ', ord: ' . $ord . '</p>';
echo "\n";
}
?>
Gewijzigd op 02/11/2005 00:29:00 door Jan Koehoorn
functie, die ik op php.net heb gevonden:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function xml_character_decode($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
$trans=array_flip($trans);
return strtr($string, $trans);
}
?>
function xml_character_decode($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
$trans=array_flip($trans);
return strtr($string, $trans);
}
?>
Volledig script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function xmlcharacters($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
return strtr($string, $trans);
}
function xml_character_decode($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
$trans=array_flip($trans);
return strtr($string, $trans);
}
$zin = "Óngerzeuk";
echo $zin;
echo "\n";
xmlcharacters($zin);
echo $zin;
?>
function xmlcharacters($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
return strtr($string, $trans);
}
function xml_character_decode($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
$trans=array_flip($trans);
return strtr($string, $trans);
}
$zin = "Óngerzeuk";
echo $zin;
echo "\n";
xmlcharacters($zin);
echo $zin;
?>
De eerste keer zou het woord met speciaal teken ge-echood moeten worden en de tweede keer met entity. Werkt dus niet.
?????
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function xml_character_decode($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
$trans=array_flip($trans);
return strtr($string, $trans);
}
?>
function xml_character_decode($string, $trans='') {
$trans=(is_array($trans))? $trans:get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($trans as $k=>$v)
$trans[$k]= "&#".ord($k).";";
$trans=array_flip($trans);
return strtr($string, $trans);
}
?>
Bij foreach worden de accolades niet eens juist gebruikt. Ik zal hem voor je herschrijven. Moment.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function xml_character_decode ($string) {
// nummers opzoeken voor entities
$str = get_html_translation_table (HTML_ENTITIES);
$str = array_flip ($str);
foreach ($str as $key => $value) {
$string = str_replace ($value, '&#' . ord ($value) . ';', $string);
}
return $string;
}
?>
function xml_character_decode ($string) {
// nummers opzoeken voor entities
$str = get_html_translation_table (HTML_ENTITIES);
$str = array_flip ($str);
foreach ($str as $key => $value) {
$string = str_replace ($value, '&#' . ord ($value) . ';', $string);
}
return $string;
}
?>
resultaat blijft nog steeds hetzelfde...
Hoe bedoelt u?
Het speciale teken blijft ongewijzigd in de string staan.
Okee, dan gaan we morgen verder ;-)
Goed ID
>Jan: Heb je nog naar mijn script gekeken?
ik heb ook even gekeken. ik dacht net even het te gevonden hebben, maar bij nader inzicht bleek het toch van niet :( spijtig
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function xml_entities ($teks)
{
$teikes = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
$teikes = array_flip ($teikes);
$teikes = array_reverse ($teikes);
foreach ($teikes as $key => $value)
{
$teks = str_replace ($value, '&#' . ord ($value) . ';', $teks);
}
$teks = str_replace("€", "€", $teks);
return $teks;
}
?>
function xml_entities ($teks)
{
$teikes = get_html_translation_table (HTML_ENTITIES, ENT_QUOTES);
$teikes = array_flip ($teikes);
$teikes = array_reverse ($teikes);
foreach ($teikes as $key => $value)
{
$teks = str_replace ($value, '&#' . ord ($value) . ';', $teks);
}
$teks = str_replace("€", "€", $teks);
return $teks;
}
?>
De problemen waren:
1. Om één of andere reden moet de variabele, waar de "bron" in staat, dezelfde naam hebben, als de variabele, waar uiteindelijk het resultaat in komt te staan (in dit geval $teks).
2. Ik moest de array, waar de speciale tekens in staan reversen. De ampersand stond namelijk helemaal achteraan in de array. Daardoor werden de ampersands, die steeds het begin van een entity aangeven, ook weer omgezet naar een entity. Nu staat de ampersand als eerste in de array (toeval?), dus deze worden nu omgezet vóór de rest van het zooitje gecodeerd wordt. Je moet er maar even aan denken.
Ik zal het ook maar even op php.net erbij zetten.
Gewijzigd op 04/11/2005 02:00:00 door Pater
Suc6 met alles!!
Groet, lissy