Titel in URL
Ik ben bezig met een leuk script, en nu wilde ik titels in de url zetten, zodat je een mooie adresbalk krijgt. Op zich wil het helemaal lukken, nu is er alleen nog één probleem: wat nu als er andere tekens - dan die ik al heb - in de titel zitten?
Ik wilde jullie daarom vragen of jullie een betere functie hebben. Heb al wat gezocht, maar kon niet echt tot het juiste keyword komen om zo scripts van dit kaliber eruit gerold te krijgen.
Mijn functie:
Nu zie je dat ik allerlei tekens gewoon uitgetypt heb, en deze in een string heb gezet om ze vervolgens één voor één langs te gaan om te replacen. Volgens mij bestaat er een veel makkelijkere methode via bijv. preg_replace(), alleen heb ik deze nog niet ontdekt.
Ik hoop dat iemand met iets beters komt, scheelt me weer bytes en leer ik waarschijnlijk ook nog eens van :-P.
Groetjes,
Jezpur
Ik wilde jullie daarom vragen of jullie een betere functie hebben. Heb al wat gezocht, maar kon niet echt tot het juiste keyword komen om zo scripts van dit kaliber eruit gerold te krijgen.
Mijn functie:
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
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
function maakUrlTitel($string) {
$tekens = array(
"á"=>"a","ä"=>"a","à"=>"a","â"=>"a","å"=>"a",
"é"=>"e","ë"=>"e","è"=>"e","ê"=>"e",
"ú"=>"u","ü"=>"u","ù"=>"u","û"=>"u",
"í"=>"i","ï"=>"i","ì"=>"i","î"=>"i",
"ó"=>"o","ö"=>"o","ò"=>"o","ô"=>"o","ø"=>"o",
"€"=>"","ç"=>"c","æ"=>"ae","ñ"=>"n","ß"=>"ss"," "=>"_");
foreach($tekens as $teken => $replacement) {
$string = str_replace($teken, $replacement, $string);
}
$pregString = "*&^%$#@!)(-+=}]{[|'\":;?/>\\.<,`~¡²³¤€¼½¾‘’¥×¬»«´¶¿µð®©þ";
for($i=0;$i<=strlen($pregString);$i++) {
$string = str_replace(substr(stripslashes($pregString), $i, 1), "", $string);
}
while(substr($string, 0, 1) == '_') {
$string = substr($string, 1, strlen($string)-1);
while(substr($string, strlen($string)-1, 1) == '_')
$string = substr($string, 0, strlen($string)-1);
return $string;
}
?>
function maakUrlTitel($string) {
$tekens = array(
"á"=>"a","ä"=>"a","à"=>"a","â"=>"a","å"=>"a",
"é"=>"e","ë"=>"e","è"=>"e","ê"=>"e",
"ú"=>"u","ü"=>"u","ù"=>"u","û"=>"u",
"í"=>"i","ï"=>"i","ì"=>"i","î"=>"i",
"ó"=>"o","ö"=>"o","ò"=>"o","ô"=>"o","ø"=>"o",
"€"=>"","ç"=>"c","æ"=>"ae","ñ"=>"n","ß"=>"ss"," "=>"_");
foreach($tekens as $teken => $replacement) {
$string = str_replace($teken, $replacement, $string);
}
$pregString = "*&^%$#@!)(-+=}]{[|'\":;?/>\\.<,`~¡²³¤€¼½¾‘’¥×¬»«´¶¿µð®©þ";
for($i=0;$i<=strlen($pregString);$i++) {
$string = str_replace(substr(stripslashes($pregString), $i, 1), "", $string);
}
while(substr($string, 0, 1) == '_') {
$string = substr($string, 1, strlen($string)-1);
while(substr($string, strlen($string)-1, 1) == '_')
$string = substr($string, 0, strlen($string)-1);
return $string;
}
?>
Nu zie je dat ik allerlei tekens gewoon uitgetypt heb, en deze in een string heb gezet om ze vervolgens één voor één langs te gaan om te replacen. Volgens mij bestaat er een veel makkelijkere methode via bijv. preg_replace(), alleen heb ik deze nog niet ontdekt.
Ik hoop dat iemand met iets beters komt, scheelt me weer bytes en leer ik waarschijnlijk ook nog eens van :-P.
Groetjes,
Jezpur
Gesponsorde koppelingen:
urlencode?
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
PHP Newbie schreef op 18.08.2008 13:01:
Nee dat is niet wat ik wil :P.
Als ik nu dit in voer:
jåg elskär dëï.
krijg ik er dit uit (bovenste is mijn functie, onderste urlencode):
jag_elskar_dei
j%E5g+elsk%E4r+d%EB%EF.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Om die chars te vervangen gebruik ik dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$lettervan ="ÁÉÓÚÍÄËÖÜÏÀÈÒÙÌáéóúíäëöüïàèòùì";
$letternaar="AEOUIAEOUIAEOUIaeouiaeouiaeoui";
$string = strtr($string, $lettervan, $letternaar);
?>
$lettervan ="ÁÉÓÚÍÄËÖÜÏÀÈÒÙÌáéóúíäëöüïàèòùì";
$letternaar="AEOUIAEOUIAEOUIaeouiaeouiaeoui";
$string = strtr($string, $lettervan, $letternaar);
?>
Oké, iets verandert:
Maar dan heb ik nog steeds niet een betere oplossing voor al die tekens. Heeft range() niet iets waardoor je al die tekens in één keer in een array krijgt?
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
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
function maakUrlTitel($string) {
$string = strtolower($string);
$tekens = array("€"=>"","ç"=>"c","æ"=>"ae","ñ"=>"n","ß"=>"ss"," "=>"_");
foreach($tekens as $teken => $replacement) {
$string = str_replace($teken, $replacement, $string);
}
$lettervan = "áéóúíäëöüïàèòùìýÿ";
$letternaar = "aeouiaeouiaeouiyy";
$string = strtr($string, $lettervan, $letternaar);
$pregString = "*&^%$#@!)(-+=}]{[|'\":;?/>\\.<,`~¡²³¤€¼½¾‘’¥×¬»«´¶¿µð®©þ";
for($i=0;$i<=strlen($pregString);$i++) {
$string = str_replace(substr(stripslashes($pregString), $i, 1), "", $string);
}
while(substr($string, 0, 1) == '_')
$string = substr($string, 1, strlen($string)-1);
while(substr($string, strlen($string)-1, 1) == '_')
$string = substr($string, 0, strlen($string)-1);
return $string;
}
?>
function maakUrlTitel($string) {
$string = strtolower($string);
$tekens = array("€"=>"","ç"=>"c","æ"=>"ae","ñ"=>"n","ß"=>"ss"," "=>"_");
foreach($tekens as $teken => $replacement) {
$string = str_replace($teken, $replacement, $string);
}
$lettervan = "áéóúíäëöüïàèòùìýÿ";
$letternaar = "aeouiaeouiaeouiyy";
$string = strtr($string, $lettervan, $letternaar);
$pregString = "*&^%$#@!)(-+=}]{[|'\":;?/>\\.<,`~¡²³¤€¼½¾‘’¥×¬»«´¶¿µð®©þ";
for($i=0;$i<=strlen($pregString);$i++) {
$string = str_replace(substr(stripslashes($pregString), $i, 1), "", $string);
}
while(substr($string, 0, 1) == '_')
$string = substr($string, 1, strlen($string)-1);
while(substr($string, strlen($string)-1, 1) == '_')
$string = substr($string, 0, strlen($string)-1);
return $string;
}
?>
Maar dan heb ik nog steeds niet een betere oplossing voor al die tekens. Heeft range() niet iets waardoor je al die tekens in één keer in een array krijgt?
het gaat toch goed zo? dan hoef je het toch niet te veranderen?
Leroy schreef op 18.08.2008 13:28:
het gaat toch goed zo? dan hoef je het toch niet te veranderen?
Klopt, maar het feit is dat er vast nog wel wat tekens zijn die ik níét in die hele reeks heb zitten. Die zullen dan worden weergegeven in de url en dat is niet mooi. Dus ik vroeg me af of er geen functie of iets bestaat om in één keer alle tekens op te halen.
Ikzelf gebruik hiervoor de volgende functie:
Deze functie replacet zoals je ziet geen vreemde tekens naar tekens zonder vreemdheid, maar doet wat ik wil. Die vreemde tekens gebruik ik toch nooit.
Deze functie maakt van
jåg elskär dëï.
het volgende:
jg-elskr-d
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function StripChars($sString)
{
$sString = strtolower($sString);
$sString = str_replace(" ", "-", $sString);
$sString = preg_replace("@[^a-z0-9-]@", "", $sString);
return $sString;
}
?>
function StripChars($sString)
{
$sString = strtolower($sString);
$sString = str_replace(" ", "-", $sString);
$sString = preg_replace("@[^a-z0-9-]@", "", $sString);
return $sString;
}
?>
Deze functie replacet zoals je ziet geen vreemde tekens naar tekens zonder vreemdheid, maar doet wat ik wil. Die vreemde tekens gebruik ik toch nooit.
Deze functie maakt van
jåg elskär dëï.
het volgende:
jg-elskr-d
Gebruik zelf deze:
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
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
function url_title($str, $separator = 'dash')
{
if ($separator == 'dash')
{
$search = '_';
$replace = '-';
}
else
{
$search = '-';
$replace = '_';
}
$trans = array(
$search => $replace,
"\s+" => $replace,
"[^a-z0-9".$replace."]" => '',
$replace."+" => $replace,
$replace."$" => '',
"^".$replace => ''
);
$str = strip_tags(strtolower($str));
foreach ($trans as $key => $val)
{
$str = preg_replace("#".$key."#", $val, $str);
}
return trim(stripslashes($str));
}[/code]
function url_title($str, $separator = 'dash')
{
if ($separator == 'dash')
{
$search = '_';
$replace = '-';
}
else
{
$search = '-';
$replace = '_';
}
$trans = array(
$search => $replace,
"\s+" => $replace,
"[^a-z0-9".$replace."]" => '',
$replace."+" => $replace,
$replace."$" => '',
"^".$replace => ''
);
$str = strip_tags(strtolower($str));
foreach ($trans as $key => $val)
{
$str = preg_replace("#".$key."#", $val, $str);
}
return trim(stripslashes($str));
}[/code]
Ik geloof dat dit de beste is:
Door Douwe kreeg ik het idee om die chars eruit te halen, en dan te replacen in de volledige string, waardoor dus altijd alles wat geen letter, cijfer of - is weggehaald wordt!
Dankje Douwe :-).
Edit: ik zal hem hier in de scriptlib zetten, geloof dat zoiets nog niet echt in de bieb zit.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function maakUrlTitel($string) {
$string = strtolower($string);
$lettervan = "áéóúíäëöüïàèòùìýÿå";
$letternaar = "aeouiaeouiaeouiyya";
$string = strtr($string, $lettervan, $letternaar);
$string = str_replace(" ", "-", $string);
$sTekens = preg_replace("_([a-z0-9-])_", "", $string);
for($i=0;$i<=strlen($sTekens);$i++) {
$string = str_replace(substr($sTekens, $i, 1), "", $string);
}
while(substr($string, 0, 1) == '-')
$string = substr($string, 1, strlen($string)-1);
while(substr($string, strlen($string)-1, 1) == '-')
$string = substr($string, 0, strlen($string)-1);
return $string;
}
?>
function maakUrlTitel($string) {
$string = strtolower($string);
$lettervan = "áéóúíäëöüïàèòùìýÿå";
$letternaar = "aeouiaeouiaeouiyya";
$string = strtr($string, $lettervan, $letternaar);
$string = str_replace(" ", "-", $string);
$sTekens = preg_replace("_([a-z0-9-])_", "", $string);
for($i=0;$i<=strlen($sTekens);$i++) {
$string = str_replace(substr($sTekens, $i, 1), "", $string);
}
while(substr($string, 0, 1) == '-')
$string = substr($string, 1, strlen($string)-1);
while(substr($string, strlen($string)-1, 1) == '-')
$string = substr($string, 0, strlen($string)-1);
return $string;
}
?>
Door Douwe kreeg ik het idee om die chars eruit te halen, en dan te replacen in de volledige string, waardoor dus altijd alles wat geen letter, cijfer of - is weggehaald wordt!
Dankje Douwe :-).
Edit: ik zal hem hier in de scriptlib zetten, geloof dat zoiets nog niet echt in de bieb zit.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
Alles wat een (ascii)waarde groter dan 127 heeft zijn in principe 'vreemde' tekens.



