Titel in URL
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
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
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);
?>
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.
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
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]
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.