Dag allemaal!

Inmiddels ben ik al een paar dagen aan het knoeien met een stukje code waar ik maar niet uitkom.
Voor de meeste gevorderde PHP gebruikers een eitje, maar voor mij een beginner als mij een helse en frustrerende last.

Huidige situatie:
Mijn mobiele website URL's worden rommelig weergegeven wanneer sprake van:
- symbolen zoals ?!
- Latijnse karakters zoals: ñéâç.

Met andere woorden: een URL met een Spaanstalige titel zoals ¿Por qué mañana? wordt weergegeven als m.mijnwebsite.nl/-Por-qu--ma-ana-.php

Gewenste uitkomst:
- verwijderen symbolen zoals ?! in de URL.
- vervangen van Latijns karakters door de "normale" Europese lettervarianten, m.a.w. ñ>n, é>e.
- hoofdletters vervangen door kleine letters. Dit geldt ook voor Ñ>n, É>e.
Oftewel: m.mijnwebsite.nl/por-que-manana.php

De originele code:
$page->type = sprintf("%s",Utilities::scrub($_POST['type']));
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));

if($page->type=='page'){
    $page->url = preg_replace("/[^A-Za-z0-9-]/","-",$page->title).".php"; 

if($page->parent > 1){
    $l = getParentById($page->parent,$pages);
    $page->url = preg_replace("/[^A-Za-z0-9-]/","-",$l->title)."/".$page->url;
    }
//print_r($page);
//exit;


De volgende code lijkt hier geschikt voor: http://stackoverflow.com/a/4054740/3158398, echter gecombineerd met mijn data werkt het niet zoals het zou moeten. Bij gebruik van speciale Latijnse letters, worden mijn URL's omgevormd tot http://m.mywebsite.com/.php, oftewel leeg. Daarnaast kan ik slechts hooguit één pagina aanmaken in geval van Latijnse karakters. Bij het proberen aan te maken van meer pagina's stuit ik op de melding: "Paginatitel bestaat al, kies een andere titel". Dit lijkt te maken te hebben met het eerstvolgende stukje code dat na de gebruikte code komt. Om deze reden heb ik deze PError code ook bijgevoerd hieronder:

De gecombineerde codes:
$page->type = sprintf("%s",Utilities::scrub($_POST['type']));
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));

if($page->type=='page'){
$page->url = friendlyUrl($page->title).".php";

if($page->parent > 1){
$l = getParentById($page->parent,$pages);
$page->url = friendlyUrl($l->title)."/".$page->url;
}
    //print_r($page);
    //exit;

    if((!$page->id)&&(file_exists("../".$page->url))){
            PError("Paginatitel bestaat al. Kies een andere titel.");
            exit();
            }


De functie zelf:
function friendlyUrl ($str = '') {

$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
$friendlyURL = preg_replace('/&([a-z]{1,2})   (?:acute|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
$friendlyURL = trim($friendlyURL, '-');
$friendlyURL = strtolower($friendlyURL);
return $friendlyURL;
}


Kan iemand me hierbij helpen? Volgens mij is het meeste al gedaan, maar mis ik net de finishing touch. Ik zou het bijzonder op prijs stellen, als beginner die volkomen vast zit. In ieder geval bedankt voor de moeite!

James.
Ivo, dan trim je alle dashes. Dat wil hij ook niet...

[size=xsmall]Toevoeging op 07/01/2014 19:43:46:[/size]

De oplossing is het gebruik van [php]iconv[/php]:

<?php
$string = '¿espanñol? ¡olé!';

// zorg dat deze niet is ingesteld op POSIX of C, anders wordt alles een vraagteken
setlocale(LC_CTYPE, 'nl_NL');

echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);
//> ?espannol? ?ole!
?>
Vervolgens kun je characters als ? en ! eruit filteren en een dash voor elke spatie invoegen:
<?php
setlocale(LC_CTYPE, 'nl_NL');


function sluggify($string) {
return str_replace(
' ', '-',
preg_replace(
'/[^[:alnum:] ]+/', '',
iconv(
'UTF-8', 'ASCII//TRANSLIT', $string
)
)
);
}

echo sluggify('¿espanñol? ¡olé!');
//> 'espannol-ole'
?>
Ivo P op 07/01/2014 19:23:33


<?php

$string = '¿espanñol? ¡olé!';

$string = remove_accents($string);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
$string = trim($string, '-');
?>




[size=xsmall]Toevoeging op 07/01/2014 19:31:08:[/size]


<?php
function remove_accents($string)
  {
    $table = array(
        'Š' => 'S', 'š' => 's', '?' => 'Dj', '?' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'E',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => 'r',
    );
    return strtr($string, $table);
  }

  $string = '¿español? ¡olé!';

  $string = remove_accents($string);
  $string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
  $string = trim($string, '-');


  echo $string;
  ?>


getest en bij mij werkt dit

[size=xsmall]Toevoeging op 07/01/2014 19:32:55:[/size]

helaas vernaggelt phphulp een hoop van de tekens: overal waar hierboven een ? staat in $tabel, moet een letter met een raar accent staan (die lang niet allemaal op mijn toetsenbord te vinden zijn.)

Die vraagtekens moet je dan maar verwijderen of vervangen door de letters die van toepassing lijken.


Bij mij werkt die helaas niet. Bij jou wel dus? Maar goed, meer kan ik niet van je vragen. Dank je wel!

[size=xsmall]Toevoeging op 07/01/2014 20:38:49:[/size]

Wouter J op 07/01/2014 19:37:31

Ivo, dan trim je alle dashes. Dat wil hij ook niet...

[size=xsmall]Toevoeging op 07/01/2014 19:43:46:[/size]

De oplossing is het gebruik van [php]iconv[/php]:

<?php
$string = '¿espanñol? ¡olé!';

// zorg dat deze niet is ingesteld op POSIX of C, anders wordt alles een vraagteken
setlocale(LC_CTYPE, 'nl_NL');

echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);
//> ?espannol? ?ole!
?>
Vervolgens kun je characters als ? en ! eruit filteren en een dash voor elke spatie invoegen:
<?php
setlocale(LC_CTYPE, 'nl_NL');


function sluggify($string) {
return str_replace(
' ', '-',
preg_replace(
'/[^[:alnum:] ]+/', '',
iconv(
'UTF-8', 'ASCII//TRANSLIT', $string
)
)
);
}

echo sluggify('¿espanñol? ¡olé!');
//> 'espannol-ole'
?>



Hi Wouter J,

Dat ziet er inderdaad ook logisch uit qua opbouw. Alleen de vraagt blijft, hoe wordt dit gecombineerd met het oog op mijn laatst gebruikte code? Hoe ziet het totaalplaatje eruit afgaande op de wensen:

- verwijderen symbolen zoals ?! in de URL.
- vervangen van Latijns karakters door de "normale" Europese lettervarianten, m.a.w. ñ>n, é>e.
- hoofdletters vervangen door kleine letters. Dit geldt ook voor Ñ>n, É>e.
Voorbeeldtitel: ¿Por qué mañana?
Gewenste url: mijnwebsite.nl/por-que-manana.php


function remove_accents($string)
  {
    
    $table = array(
        'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => '?',
    );

    return strtr($string, $table);
  } 


Mijn eigen originele code was in eerste instantie:
$page->type = sprintf("%s",Utilities::scrub($_POST['type']));
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));

if($page->type=='page'){
    $page->url = preg_replace("/[^A-Za-z0-9-]/","-",$page->title).".php"; 

if($page->parent > 1){
    $l = getParentById($page->parent,$pages);
    $page->url = preg_replace("/[^A-Za-z0-9-]/","-",$l->title)."/".$page->url;
    }
//print_r($page);
//exit;
Trim() verwijdert tekens aan het begin en eindd van een string. In dit geval -

[size=xsmall]Toevoeging op 07/01/2014 21:09:11:[/size]

Iconv() was kennelimk niet beschikbaar op de server in kwestie.

Wat gebeurt er / gaat er nog fout bij het script zoalx ik dat testte en wasrvan ik een screenshot postte?
Ivo P op 07/01/2014 21:06:18

Trim() verwijdert tekens aan het begin en eindd van een string. In dit geval -

[size=xsmall]Toevoeging op 07/01/2014 21:09:11:[/size]

Iconv() was kennelimk niet beschikbaar op de server in kwestie.

Wat gebeurt er / gaat er nog fout bij het script zoalx ik dat testte en wasrvan ik een screenshot postte?


Hi Ivo P, dank je voor je reactie. Op basis van de exact zelfde code als in jouw screenshot wordt de paginatitel ¿Por qué mañana? weergegeven als: mijnwebsite.com/¿Por que manana?.php

Zoals je ziet blijven de (1) vraagtekens/uitroeptekens staan (i.p.v. verwijderd) (2) hoofdletters blijven hoofdletters en (3) een spatie wordt nu niet meer vervangen door een streepje (-)

Gewenste situatie dus: mijnwebsite.com/por-que-manana.php

Gebruikte code dus:
function remove_accents($string)
  {
    
    $table = array(
        'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => '?',
    );

    return strtr($string, $table);
  } 

  $string = '¿español? ¡olé!';

  $string = remove_accents($string);
  $string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
  $string = trim($string, '-');


  echo $string;


ah ik zie het al: ik heb niet met hoofdletters getest:


<?php
  $string = remove_accents($string);
  $string = strtolower($string);
  $string = preg_replace('#[^a-z0-9]+#', '-', $string);
  $string = trim($string, '-');
?>


$string = '¿Español? ¡olé!';
levert mij op
espanol-ole
Ivo P op 08/01/2014 10:43:51

ah ik zie het al: ik heb niet met hoofdletters getest:


<?php
  $string = remove_accents($string);
  $string = strtolower($string);
  $string = preg_replace('#[^a-z0-9]+#', '-', $string);
  $string = trim($string, '-');
?>


$string = '¿Español? ¡olé!';
levert mij op
espanol-ole


Hmmm. Geen verandering, precies dezelfde weergave. Heb de cache geleegd etc.

function remove_accents($string)
  {
    
    $table = array(
        'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => '?',
    );

    return strtr($string, $table);
  } 

  $string = remove_accents($string);
  $string = strtolower($string);
  $string = preg_replace('#[^a-z0-9]+#', '-', $string);
  $string = trim($string, '-');


  echo $string;
jij hebt het er over dat je ook nog een stuk url op je scherm ziet, maar dat staat niet in bovenstaande snippet.

Roep je bovenstaande code wel aan?
Ik zie nu in wat je bedoelt met de code aanroepen. Het eerste gedeelte is gelukt, lowercase. Nu worden alleen de spaties niet meer vervangen door streepjes "-"
Het laatste gedeelte, verwijderen van ¿?¡! nog niet. Hoe verwerk ik dit in de onderstaande, bijbegewerkte code?

        if($page->type=='page'){
        $page->url = strtolower ( remove_accents($page->title).".php");
 
        if($page->parent > 1){
        $l = getParentById($page->parent,$pages);
        $page->url = strtolower ( remove_accents($l->title)."/".$page->url);
        }



function remove_accents($string)
  {
    
    $table = array(
        'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => '?',
    );

    return strtr($string, $table);
  } 

  $string = remove_accents($string);
  $string = strtolower($string);


  echo $string;
Ik vermoed nu wat je verkeerd doet:

laten we van het onderste blok code van jou eens 1 functie maken:

regel 15 wordt

$string = strtr($string, $table);

De regels 18 + 19 gaan dan tussen regel 15 en 16

En er komt dan ook nog een regel

return $string;

voor de } van de huidige regel 16


regel 21 vervalt dan.

en in je bovenste code blok kan strtolower() vervallen op regel 2


Ivo P op 08/01/2014 15:51:01

Ik vermoed nu wat je verkeerd doet:

laten we van het onderste blok code van jou eens 1 functie maken:

regel 15 wordt

$string = strtr($string, $table);

De regels 18 + 19 gaan dan tussen regel 15 en 16

En er komt dan ook nog een regel

return $string;

voor de } van de huidige regel 16


regel 21 vervalt dan.

en in je bovenste code blok kan strtolower() vervallen op regel 2





Nee, helaas. Terug bij af.
1) Spaties i.p.v. "-"
2) Hoofdletters blijven hoofdletters.

Gewijzigde code
         if($page->type=='page'){
        $page->url = remove_accents($page->title).".php";
 
        if($page->parent > 1){
        $l = getParentById($page->parent,$pages);
        $page->url = remove_accents($l->title)."/".$page->url;
        } 


Gewijzigde functie
function remove_accents($string)
  {
    
    $table = array(
        'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => '?',
    );

    $string = strtr($string, $table);
    return $string;
    $string = remove_accents($string);
    $string = strtolower($string);
    echo $string; 
}


Volgens mij heb ik het laatste gedeelte niet goed overgenomen.

Maar waar voor mij werkelijk het probleem ligt, en tegelijkertijd de oplossing, was dat ik - de door jou eerder opgegeven funtie - niet had opgeroepen in de code. Ik weet namelijk niet hoe dit verwerkt moet worden.

Hoe roep ik de onderstaande functie op..
function remove_accents($string)
  {
    
    $table = array(
        'Š' => 'S', 'š' => 's', 'Ð' => 'Dj', 'ð' => 'dj', 'Ž' => 'Z', 'ž' => 'z', '?' => 'C', '?' => 'c', '?' => 'C', '?' => 'c',
        'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'A', 'Ç' => 'C', 'È' => 'E', 'É' => 'e',
        'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ñ' => 'n', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O',
        'Õ' => 'O', 'Ö' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ý' => 'Y', 'Þ' => 'B', 'ß' => 'Ss',
        'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'a', 'ç' => 'c', 'è' => 'e', 'é' => 'e',
        'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'o', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o',
        'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ý' => 'y', 'ý' => 'y', 'þ' => 'b',
        'ÿ' => 'y', '?' => 'R', '?' => '?',
    );

    return strtr($string, $table);
  }

  $string = remove_accents($string);
  $string = strtolower($string);
  $string = preg_replace('#[^a-z0-9]+#', '-', $string);
  $string = trim($string, '-');


  echo $string; 


In deze code..
 if($page->type=='page'){
        $page->url = remove_accents($page->title).".php";
 
        if($page->parent > 1){
        $l = getParentById($page->parent,$pages);
        $page->url = remove_accents($l->title)."/".$page->url;
        } 


Als de functie klopt, dan zou met aanpassing van de code hierboven de functie op de juiste wijze moeten werken lijkt me. Kun je me ajb de totale code van hierboven geven? Dat zou een stuk sneller zijn.

Reageren