Kom ihåg mig?
Home Menu

Menu


str_replace fungerar inte som jag vill

 
Ämnesverktyg Visningsalternativ
Oläst 2012-07-28, 03:48 #1
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Standard str_replace fungerar inte som jag vill

Hejsan. Sitter med str_replace(), men blir inte som jag vill..

Jag har en xml fil som jag hämtar data från, bla. en url.

url'en är med å ä ö, vilket gör att jag inte kan använda simplehtmldom..

Så jag tänkte att jag skulle försöka byta ut å, ä, ö till %C3%A5, %C3%A4, %C3%B6.. Men får inte till det riktigt..hm

PHP-kod:
$real_url $xml->product->advertiserProductUrl;
            
$org_url  "$real_url";
$search_url = array("å""ä""ö");
$replace_url = array("%C3%A5""%C3%A4""%C3%B6");
            
$new_url str_replace($search_url$replace_url$org_url);
            
echo 
$new_url "<br>";
echo 
$real_url
Jag får ut båda två variablarna, men båda innehåller fortfarande åä och ö..
Jag är medveten om att $real_url alltid kommer att innehålla å ä ö, men jag vill ju att $new_url ska bli utan å ä ö, och istället innehålla de tecknen jag angivit i str_replace skriptet..
http://nelly.com/se/kläder-för-kvinn...top-676373-99/
Det där är url'en som jag vill ha omgjord, men går inte för mig :P

Någon med förslag?

PS. om jag skriver url'en för hand istället för att hämta ut den från XML filen, då blir det rätt.

alltså:

PHP-kod:
$real_url "http://nelly.com/se/kläder-för-kvinnor/sportkläder/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/";
            
$org_url  "$real_url";
$search_url = array("å""ä""ö");
$replace_url = array("%C3%A5""%C3%A4""%C3%B6");
            
$new_url str_replace($search_url$replace_url$org_url);
            
echo 
$new_url "<br>";
echo 
$real_url
någon som fattar? :P

tack
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 09:03 #2
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
jayzee jayzee är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2008
Inlägg: 1 089
PHP-kod:
$real_url "http://nelly.com/se/kläder-för-kvinnor/sportkläder/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/";
$new_url urlencode($real_url);

// $new_url: http://nelly.com/se/kl%C3%A4der-f%C3%B6r-kvinnor/sportkl%C3%A4der/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/ 
jayzee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 12:37 #3
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Smart, men fungerade inte riktigt..hm

Får felmeddelande:
Warning: file_get_contents(http%3A%2F%2Fnelly.com%2Fse%2Fkl %C3%A4der-f%C3%B6r-kvinnor%2Fsportkl%C3%A4der%2Ftr%C3%B6jor%2Froxy-169%2Fbeach-brights-zipper-169086-54%2F) [function.file-get-contents]: failed to open stream: No such file or directory in C:\Program Files\xampp\htdocs\reaplagg\admin\includes\simple_ html_dom.php on line 70

Fatal error: Call to a member function find() on a non-object in C:\Program Files\xampp\htdocs\reaplagg\admin\includes\functio ns.php on line 109
Det verkar fungera bra om jag skriver url'en manuellt. såhär:

echo getOrgPrice('http://nelly.com/se/kläder-för-kvinnor/sportkläder/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/');

Men så fort jag använder en variabel istället för klartext så fungerar det inte :S

såhär ser det ut med en variabel:

echo getOrgPrice($new_url);


Använder jag urlencode() runt $real_url och lägger in det i $new_url så blir det felmeddelande.
Använder jag $real_url direkt i funktionen istället för $new_url, så händer ingenting.. Inga felmeddelanden, men inga siffror syns heller.. hm.

Såhär ser min funktion ut:

PHP-kod:
include_once('includes/simple_html_dom.php');
function 
getOrgPrice($url) {

    
$original_url  $url;
    
$delete_url = array("å","ä""ö");
    
$replace_url   = array("%C3%A5""%C3%A4""%C3%B6");
    
$new_url str_replace($delete_url$replace_url$original_url);
    
    
$html file_get_html($new_url);
                        
    
$ret $html->find('p[class=productOverview_items_content_itemlist_item_reaprice_price] span');
                           
    foreach(
$ret as $k=>$v) {
                           
        
$original_string  $v;
        
$delete_string = array("<span style=\"text-decoration:line-through;\">SEK ","</span>");
        
$replace_with   = array("""");
        
$new_string str_replace($delete_string$replace_with$original_string);
                                   
        return 
$new_string;
    };

jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 12:43 #4
Droog Droog är inte uppkopplad
Medlem
 
Reg.datum: Apr 2011
Inlägg: 129
Droog Droog är inte uppkopplad
Medlem
 
Reg.datum: Apr 2011
Inlägg: 129
Du ska inte URL-encoda "http://"
Droog är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 12:46 #5
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Är det det som gör att min kod failar.. hm.
Ska testa detta!

Kommer säkert göra något jävligt onödigt nu :P Men återkommer!
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 12:57 #6
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Nu fungerar det.. Men jag kanske är onödig i min kod? Ser ni om jag kanske kan städa upp på något sätt? :P

PHP-kod:
$xml_url mysql_real_escape_string($_POST['xml_url']);
$xml simplexml_load_file($xml_url);
            
$message 1;

$real_url $xml->product->advertiserProductUrl;
//http://nelly.com/se/kläder-för-kvinnor/sportkläder/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/

$original_url  $real_url;
$delete_url = array("http://");
$replace_url   = array("");
$new_url_without str_replace($delete_url$replace_url$original_url);
//nelly.com/se/kläder-för-kvinnor/sportkläder/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/

$new_url urlencode($new_url_without);
//nelly.com%2Fse%2Fkl%C3%A4der-f%C3%B6r-kvinnor%2Fsportkl%C3%A4der%2Fsport-bh%2Ffilippa-k-soft-sport-2123%2Fyoga-bra-top-676373-99%2F

$original_url  $new_url;
$delete_url = array("%2F");
$replace_url   = array("/");
$new_url_function str_replace($delete_url$replace_url$original_url);
//nelly.com/se/kl%C3%A4der-f%C3%B6r-kvinnor/sportkl%C3%A4der/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/


$function_url "http://" $new_url_function;
//http://nelly.com/se/kl%C3%A4der-f%C3%B6r-kvinnor/sportkl%C3%A4der/sport-bh/filippa-k-soft-sport-2123/yoga-bra-top-676373-99/

echo $function_url "<br>";
echo 
$real_url "<br>";
echo 
getOrgPrice($function_url); 
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 13:21 #7
P3N P3N är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2010
Inlägg: 331
P3N P3N är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2010
Inlägg: 331
För att ta bort "http://" hade jag använt substr istället --> http://php.net/manual/en/function.substr.php

Edit: substr_replace borde passa det du behöver perfekt --> http://www.php.net/manual/en/functio...tr-replace.php

Senast redigerad av P3N den 2012-07-28 klockan 13:33
P3N är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 14:12 #8
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Använder nu substr för http, fungerade fint.

Förstår mig dock inte på substr_replace.. jag är en nybörjare inom php tyvärr.
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 14:50 #9
P3N P3N är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2010
Inlägg: 331
P3N P3N är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2010
Inlägg: 331
Jag hade fel om "substr_replace". Den byter bara ut på fasta positioner i strängen som man anger. Fick för mig att den kunde köra replace inom ett visst område ifall det blir "träff" men så var det ju inte.
Men "substr" är användbart till detta iallafall

Senast redigerad av P3N den 2012-07-28 klockan 14:53
P3N är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-07-28, 15:00 #10
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Japp tack!!

Det ända jobbiga nu är att, det tar typ en timme att hämta datan från nellys sida till varje produkt, eftersom att det är typ, 2000 produkter (minst).. haha

Men men, vill man ha det på bästa sätt för sina användare, så får man stå ut med väntetiden.. Man kanske kan göra som så att, man hämtar all data från xml filen först, och sätter in det i databasen.

sen i en kolumn har man typ "ny" med en 0a eller 1a.

0 = produkten fanns redan i databasen
1 = produkten är ny

så första gången man kör skriptet så är alla produkter nya.
nästa vecka när man uppdaterar databasen så gör man om alla produkter till 0, och om en produkt som finns i xml redan finns i databasen så stannar 0a kvar.

om en produkt finns i xml filen men inte i databasen så får den en 1a.

sen när uppdateringen är klar så körs scrapingen på alla produkter med en 1a.
då slipper man scrapa på alla produkter som faktiskt redan har original priset..

viktigt dock kanske att, alla som har en 1a i kolumnen "ny" har en 0a i kolumen "visible".
Hämtar nämligen ut alla prudkter med visibile = 1
och när scrapingen är klar, så sätts visible = 1

ajaa, får sitta och laborera osv :P Jag är rätt ny inom php som sagt, så detta projekt är till för att lära mig mest :P

tack för all hjälp!
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 05:02.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017