SEO vriendelijke URL's: Latijnse letters, lowercase
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$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;
$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:
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
$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();
}
$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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
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;
}
$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.
Gewijzigd op 07/01/2014 11:51:09 door James de Graaf
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class html
{
static 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);
}
}
?>
class html
{
static 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);
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function sanitize_text_for_urls( $str ) {
return strtolower( strtr( preg_replace('/[^a-zA-Z0-9-\s]/u', '', iconv( 'UTF-8', 'ASCII//TRANSLIT', $str )), ' ', '-') );
}
// For example
// Électricité, plâterie ---> electricite-platerie
// Structure & gros œuvre ---> structure-gros-oeuvre
// Façade & peinture ---> facade-peinture
?>
function sanitize_text_for_urls( $str ) {
return strtolower( strtr( preg_replace('/[^a-zA-Z0-9-\s]/u', '', iconv( 'UTF-8', 'ASCII//TRANSLIT', $str )), ' ', '-') );
}
// For example
// Électricité, plâterie ---> electricite-platerie
// Structure & gros œuvre ---> structure-gros-oeuvre
// Façade & peinture ---> facade-peinture
?>
Zij het dat iconv() niet per se op elke server werkt.
Wees dan alleen wel zo slim om eerst alles naar klein letters om te vormen en dan pas de speciale karakters te vervangen. Scheelt je de helft aan mogelijke karakters.....
Ik ben aan de slag gegaan met beide codes van Ivo P en Michael-
Helaas werkt het nog steeds niet. De melding "Paginatitel bestaat al" is gelukkig niet meer aan de orde.
Echter, worden Latijnse karakters nog steeds vervangen door een streepje "-"
.
Mijn code ziet er, voor het gemak vanwege de lengte van de laatstgenoemde code door Michael-, nu als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(!$page->title){
PError("Vul een titel in.");
}
$page->type = sprintf("%s",Utilities::scrub($_POST['type']));
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));
if($page->type=='page'){
$page->url = sanitize_text_for_urls($page->title).".php";
if($page->parent > 1){
$l = getParentById($page->parent,$pages);
$page->url = sanitize_text_for_urls($l->title)."/".$page->url;
}
if((!$page->id)&&(file_exists("../".$page->url))){
PError("Paginatitel bestaat al. Kies een andere titel.");
exit();
}
}
PError("Vul een titel in.");
}
$page->type = sprintf("%s",Utilities::scrub($_POST['type']));
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));
if($page->type=='page'){
$page->url = sanitize_text_for_urls($page->title).".php";
if($page->parent > 1){
$l = getParentById($page->parent,$pages);
$page->url = sanitize_text_for_urls($l->title)."/".$page->url;
}
if((!$page->id)&&(file_exists("../".$page->url))){
PError("Paginatitel bestaat al. Kies een andere titel.");
exit();
}
}
De functie:
Code (php)
1
2
3
4
2
3
4
function sanitize_text_for_urls( $str )
{
return strtolower( strtr( preg_replace('/[^a-zA-Z0-9-\s]/u', '', iconv( 'UTF-8', 'ASCII//TRANSLIT', $str )), ' ', '-') );
}
{
return strtolower( strtr( preg_replace('/[^a-zA-Z0-9-\s]/u', '', iconv( 'UTF-8', 'ASCII//TRANSLIT', $str )), ' ', '-') );
}
Positie van deze functie: na afsluiting van een voorafgaande functie en voor (mocht dit er toe doen):
class Squeeze
{
public $theme;
public $offer;
public $call;
public $find;
public $pnav;
public $lnav;
public $active;
}
etc. etc.
Gewijzigd op 07/01/2014 13:51:20 door James de Graaf
function sanitize_text_for_urls( $str )
{
return strtolower( strtr( preg_replace('/[^a-zA-Z0-9-\s]/u', '', iconv( 'UTF-8', 'ASCII//TRANSLIT', $str )), ' ', '-') );
}
Maak deze functie eerst eens als
function sanitize_text_for_urls( $str )
{
return iconv( 'UTF-8', 'ASCII//TRANSLIT', $str );
}
en breid dat daarna steeds verder uit
Als we het over de door jou opgezette functie zouden hebben, wat zou de reden kunnen zijn dat hij 'm ook niet pakt?
Functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class html
{
static 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);
}
}
?>
class html
{
static 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);
}
}
?>
Code:
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
$page->type = sprintf("%s",Utilities::scrub($_POST['type']));
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));
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;
}
if((!$page->id)&&(file_exists("../".$page->url))){
PError("Paginatitel bestaat al. Kies een andere titel.");
exit();
}
}
$page->url = sprintf("%s",Utilities::scrub($_POST['url']));
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;
}
if((!$page->id)&&(file_exists("../".$page->url))){
PError("Paginatitel bestaat al. Kies een andere titel.");
exit();
}
}
of er een losse functie van maken en " class html { " + de laatste "}" verwijderen, net als het woordje static.
(bij mij maakt het deel uit van een groter geheel dan alleen deze functie)
Ivo P op 07/01/2014 14:57:26:
$page->url = html::remove_accents($page->title).".php";
of er een losse functie van maken en " class html { " + de laatste "}" verwijderen, net als het woordje static.
(bij mij maakt het deel uit van een groter geheel dan alleen deze functie)
of er een losse functie van maken en " class html { " + de laatste "}" verwijderen, net als het woordje static.
(bij mij maakt het deel uit van een groter geheel dan alleen deze functie)
Bijna!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
}
{
$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);
}
Waar een vraagteken '?' inderdaad een 'r' wordt, is dat bij de (meeste) andere letters niet het geval. 'ñ' blijft bijvoorbeeld 'ñ'
De functie dus veranderd. De code heb ik onveranderd gebruikt.
Bij de HTML versie werkt het overigens niet..
Gewijzigd op 07/01/2014 16:05:56 door James de Graaf
In mijn bronbestand stond er een R en een r met een accent zoals op é
En dat probleem blijft ook bestaan voor jouw script:
In welke tekenset krijg je jij je teksten binnen? Als dat ISO8859-x is, dan moet je je script met hardcoded deze rare letters ook in die tekenset opslaan.
Doe je dat niet en gebruik je bijvoorbeeld Unicode, dan is de ñ uit jouw invoer inderdaad niet gelijk aan de ñ in het script.
Ivo P op 07/01/2014 16:16:38:
Mogelijk zit er een tekenset probleem hierboven:
In mijn bronbestand stond er een R en een r met een accent zoals op é
En dat probleem blijft ook bestaan voor jouw script:
In welke tekenset krijg je jij je teksten binnen? Als dat ISO8859-x is, dan moet je je script met hardcoded deze rare letters ook in die tekenset opslaan.
Doe je dat niet en gebruik je bijvoorbeeld Unicode, dan is de ñ uit jouw invoer inderdaad niet gelijk aan de ñ in het script.
In mijn bronbestand stond er een R en een r met een accent zoals op é
En dat probleem blijft ook bestaan voor jouw script:
In welke tekenset krijg je jij je teksten binnen? Als dat ISO8859-x is, dan moet je je script met hardcoded deze rare letters ook in die tekenset opslaan.
Doe je dat niet en gebruik je bijvoorbeeld Unicode, dan is de ñ uit jouw invoer inderdaad niet gelijk aan de ñ in het script.
Mijn charset=iso-8859-1. Dan zou die het moeten doen geef je aan? Of bedoel je met "dan moet je je script met hardcoded deze rare letters ook in die tekenset opslaan." dat ik nog een andere stap moet nemen zodat de letters worden overgenomen?
in je editor moet je het script ook opslaan met die tekenset.
Ivo P op 07/01/2014 17:01:00:
in je editor moet je het script ook opslaan met die tekenset.
Super, gelukt! Ik zit nu bijna op m'n ideale URL structuur.
Zoals ik aangaf, en jij/jullie hebben gemerkt, heb ik geen ervaring met PHP.
Om deze letters te transformeren naar lower case, weet ik dat kan op basis van "strtolower". Hoe verwerk ik deze optie in jouw functie?
Het allermooiste zou zijn om vraagtekens en uitroeptekens te verwijderen uit de url structuur, zodat de paginanaam ¿Por qué mañana? uitgebeeld wordt in http://m.mijnwebsite.nl/por-que-manana.php. Maar goed, het allerlaatste puntje durf ik bijna niet meer te vragen na al jouw/jullie hulp. Tenzij dit natuurlijk vrij gemakkelijk te verwerken is.
Super bedankt in ieder geval! :-)
Gewijzigd op 07/01/2014 17:27:35 door James de Graaf
iets als:
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
check even of je dan niet 2 -- achterelkaar kunt overhouden.
Ivo P op 07/01/2014 17:52:22:
als je er vanuit gaat dat na aanroep van die functie alleen nog a-z/0-9 in je tekst zit en de rest leestekens zijn:
iets als:
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
check even of je dan niet 2 -- achterelkaar kunt overhouden.
[/quote
Zoiets? Waarschijnlijk niet :). Heft dat niet de oplossing voor speciale tekens op?
iets als:
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
check even of je dan niet 2 -- achterelkaar kunt overhouden.
[/quote
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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',
);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
return strtr($string, $table);
}
{
$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',
);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
return strtr($string, $table);
}
Zoiets? Waarschijnlijk niet :). Heft dat niet de oplossing voor speciale tekens op?
Eerst vertalen van de letters en dan het restant er uit.
En ik voorspel vast een volgende stap: dubbele - en begin of eind - er vanaf/
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function remove_accents($string)
{
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($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 = preg_replace('#[^a-z0-9]+#', '-', strtolower($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);
}
Ook geprobeerd met (1) $string = preg_replace('#[^a-z0-9] strtolower($string));
of (2) string strtolower ( string $str )
etc. etc.
Gewijzigd op 07/01/2014 18:58:58 door James de Graaf
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$string = '¿espanñol? ¡olé!';
$string = remove_accents($string);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
$string = trim($string, '-');
?>
$string = '¿espanñol? ¡olé!';
$string = remove_accents($string);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
$string = trim($string, '-');
?>
Toevoeging op 07/01/2014 19:31:08:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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;
?>
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
Toevoeging op 07/01/2014 19:32:55:
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function remove_accents($string)
{
$string = remove_accents($string);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
$string = trim($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 = remove_accents($string);
$string = preg_replace('#[^a-z0-9]+#', '-', strtolower($string));
$string = trim($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);
}
Pakt 'ie niet. Vergeef me voor me onbenulligheid, maar zoals je begrijpt had ik tot 4 dagen geleden nog nooit met PHP gewerkt. Wat is de totale juiste code, gecombineerd met jouw code? Dan ben ik er geloof ik eindelijk uit. :)
Gewijzigd op 07/01/2014 19:35:44 door James de Graaf