[PHP] preg_replace - vreemde output?

Pagina: 1
Acties:

  • Glock
  • Registratie: November 2001
  • Niet online
ik heb een script dat zoekt door een variabele naar href='blaat.com' tags en gaat deze replacen...

het script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$blaat .= "<a href=\"http://www.eensite.com/\">blaat</a>";

function fix_url($url)
{
    $script_uri = "http://blaat.com/socket/";

    $search = array ("'(href=)(\"|\')(.*?)(\"|\')'i"
                    );

    $replace = array ("href=\"$script_uri\1\""
                     );

    $final = preg_replace($search, $replace, $url);
    return $final;
}

$test = fix_url($blaat);

echo $test;
?>

de output:
code:
1
<a href="http://blaat.com/socket/">

waarom is de output bij \1 een blokje en niet de url? of beter gezegd, hoe laat ik dit wel gebeuren?

(bij de output achter socket/ staat nog een zwart blokje in notepad, browser geeft blokje niet weer)

Edit: Rare zinstructuur.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

doe eens
code:
1
echo "<pre>", var_dump ( $final ), "</pre>";

voordat je 'm returnt in de functie.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Glock
  • Registratie: November 2001
  • Niet online
code toegevoegd en dit is de output...
code:
1
2
<pre>string(53) "<a href="http://mike.dnsalias.com/socket/">blaat</a>"
</pre><a href="http://mike.dnsalias.com/socket/">blaat</a>

:?

Verwijderd

waarom gebruik je arrays voor search en replace als het een gewone string is?

edit: ik veronderstel dat je \\1 bedoelt? ipv \1
Bovendien wil je wsl \\3 hebben (het .*? gedeelte)

  • Glock
  • Registratie: November 2001
  • Niet online
Op dinsdag 22 januari 2002 17:38 schreef Jppr het volgende:
waarom gebruik je arrays voor search en replace als het een gewone string is?
dit heb ik gedaan omdat dit het begin is van een rij van replacements, het uiteindelijke script moet ook nog form tags en javascript tags etc etc gaan omvormen.

Verwijderd

En waarom gebruik je een ' als delimiter en niet gewoon een / ofzo?

Verwijderd

Op dinsdag 22 januari 2002 17:39 schreef Glock het volgende:

[..]

dit heb ik gedaan omdat dit het begin is van een rij van replacements, het uiteindelijke script moet ook nog form tags en javascript tags etc etc gaan omvormen.
dan zal je in je preg functie toch iets moeten hebben van $search[$i] ofzo... (in dit geval gewoon 0 omdat je nog geen loop hebt)

Verwijderd

Op dinsdag 22 januari 2002 17:40 schreef Zef het volgende:
En waarom gebruik je een ' als delimiter en niet gewoon een / ofzo?
vond ik ook, hoewel ik / nu ook niet superduidelijk vind door de verwarring met \ enzo. Ik gebruik meestal !

  • Glock
  • Registratie: November 2001
  • Niet online
ja, ik vind die ' een stuk duidelijker voor mezelf en dat zou niks uit moeten maken en die array maakt ook niks uit...
If subject is an array, then the search and replace is performed on every entry of subject, and the return value is an array as well.
en dat ie hem behandelt is dus ook te zien aan de output alleen snap ik nog steeds niet waarom hij de \1 als blokje weergeeft...

ennuh :)
"\\1" and "\1" are the same.
en voor de duidelijkheid, ik had beide geprobeerd met hetzelfde resultaat.

Verwijderd

Op dinsdag 22 januari 2002 18:58 schreef Glock het volgende:
ja, ik vind die ' een stuk duidelijker voor mezelf en dat zou niks uit moeten maken en die array maakt ook niks uit...
[..]

en dat ie hem behandelt is dus ook te zien aan de output alleen snap ik nog steeds niet waarom hij de \1 als blokje weergeeft...

ennuh :)
[..]
oei, dat wist ik niet :) sorry dan

maar bedoel je niet \3 dan?

  • Glock
  • Registratie: November 2001
  • Niet online
ik heb van \0 t/m \10 geprobeerd elk met hetzelfde resultaat, maar het kan best dat het 3 is, ik heb nml geen idee welk van deze blokjes het goede resultaat bevat...

zodra ik dat blokje heb weggewerkt kom ik er wel weer verder uit maar dat is nou juist het probleem, dat blokje wegkrijgen

Verwijderd

die \1,\2...\n duiden op het n-de blokje haakjes (). Dus \1 duidt op (href=). \3 is dan de link zelf (nl. (.*?)

Probeer eens $search, $array etC. in de preg_replace zelf te zetten?

dus preg_replace("...","...","...");

als dat werkt probeer je eens met

preg_replace("$search","$replace","$url");

hoewel ik niet zie wat het zou kunnen izjn, want die " kan je in principe weglaten...

wat wil je eigenlijk als output?

  • Glock
  • Registratie: November 2001
  • Niet online
dit werkt ook niet maar ik heb 't probleem al gevonden
hij pakte (\"|\') niet goed dit moest ik gaan vervangen door [\"|\']

maar thx anyway

  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Ik weet dat Glock soms een beetje vaag is. Wat we als output wilden was bijvoorbeeld:
Bij de input:
code:
1
<a href="http://www.tweakers.net/">

Als output:
code:
1
<a href="http://eenhost.com/eenscript/www.tweakers.net/">

Intussen is het hem al gelukt, ik weet niet precies meer waardoor. Maar iig bedankt allemaal.
Pagina: 1