speciale tekend omzetten naar html entity nummers

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pater

Pater

01/11/2005 23:31:00
Quote Anchor link
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 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?.
 
PHP hulp

PHP hulp

23/11/2024 11:04:27
 
B a s
Beheerder

B a s

01/11/2005 23:40:00
Quote Anchor link
$rss = stripslashes($rss);
$rss = htmlspecialchars($rss);

:)
 
Pater

Pater

01/11/2005 23:45:00
Quote Anchor link
Het probleem is dat ik entity nummers moet hebben i.p.v. intity namen. Bijvoorbeeld "Ó" i.p.v. "Ó"
 
Jan Koehoorn

Jan Koehoorn

01/11/2005 23:48:00
Quote Anchor link
Volgens mij bedoel je ord ()

php manual
Gewijzigd op 01/11/2005 23:48:00 door Jan Koehoorn
 
Pater

Pater

01/11/2005 23:52:00
Quote Anchor link
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.
 
Jan Koehoorn

Jan Koehoorn

02/11/2005 00:06:00
Quote Anchor link
Ik ben ff aan het zoeken voor je.
 
Jan Koehoorn

Jan Koehoorn

02/11/2005 00:15:00
Quote Anchor link
Kijk eens op deze pagina. Hier doe ik dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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";
}

?>
Gewijzigd op 02/11/2005 00:29:00 door Jan Koehoorn
 
Pater

Pater

02/11/2005 01:18:00
Quote Anchor link
Hoe kan ik hiermee een string met speciale tekens omzetten naar een string met entities? op php.net stond een scriptje beschreven, maar die werkte bij mij niet:

functie, die ik op php.net heb gevonden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}

?>


Volledig script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;

?>

De eerste keer zou het woord met speciaal teken ge-echood moeten worden en de tweede keer met entity. Werkt dus niet.

?????
 
Jan Koehoorn

Jan Koehoorn

02/11/2005 01:22:00
Quote Anchor link
Nee, logisch. Kijk naar de code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}

?>


Bij foreach worden de accolades niet eens juist gebruikt. Ik zal hem voor je herschrijven. Moment.
 
Jan Koehoorn

Jan Koehoorn

02/11/2005 01:29:00
Quote Anchor link
Probeer hem zo eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>
 
Pater

Pater

02/11/2005 01:33:00
Quote Anchor link
resultaat blijft nog steeds hetzelfde...
 
Jan Koehoorn

Jan Koehoorn

02/11/2005 01:35:00
Quote Anchor link
Hoe bedoelt u?
 
Pater

Pater

02/11/2005 01:41:00
Quote Anchor link
Het speciale teken blijft ongewijzigd in de string staan.
 
Jan Koehoorn

Jan Koehoorn

02/11/2005 01:44:00
Quote Anchor link
Okee, dan gaan we morgen verder ;-)
 
Pater

Pater

02/11/2005 01:46:00
Quote Anchor link
Goed ID
 
Pater

Pater

03/11/2005 22:57:00
Quote Anchor link
>Jan: Heb je nog naar mijn script gekeken?
 
Hipska BE

Hipska BE

04/11/2005 00:55:00
Quote Anchor link
goeiemorgen mensen,

ik heb ook even gekeken. ik dacht net even het te gevonden hebben, maar bij nader inzicht bleek het toch van niet :( spijtig
 
Pater

Pater

04/11/2005 01:50:00
Quote Anchor link
IK HEB HET!!! :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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("€", "&#8364;", $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
 
Lissy Pixel

Lissy Pixel

04/11/2005 10:20:00
Quote Anchor link
Geweldig en TOPPIES dat je ook de terugkoppeling geeft!!
Suc6 met alles!!
Groet, lissy
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.