Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

ogenschijnlijk lege variabele niet leeg

Pagina: 1
Acties:

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 29-05 15:34

RRX

@life-

Topicstarter
Ik zit met een vreemd probleem.

Ik heb een script welke uit een XML bestand gegevens importeert.

Nu liep het script vast omdat er in een veld "titel" niets stond.

wanneer ik
PHP:
1
print($ArticleKey."-".$Artikel['titel']."-");

doe, dan krijg ik niets te zien behalve de 2 streepjes die tegen elkaar aankomen zonder iets er tussenin.

Wanneer ik echter
PHP:
1
var_dump($Artikel['titel']);


Doe, dan krijg ik string(6) "" als resultaat???

het probleem hiermee is dat ik eigenlijk wil controleren of "titel" leeg is, dit is een verplicht veld dus deze moet ingevuld zijn. Maar als ik op de bovengenoemde variabele:

PHP:
1
2
3
if(empty($Artikel['titel'])){
 //doe iets
}


probeer te doen, werkt dit ook niet omdat de variabele schijnbaar niet leeg is 8)7

Mijn vraag hoe is dit mogelijk? en hoe kan ik de string toch identificeren als "empty"

mijn T.net systeemspecspagina


  • ik222
  • Registratie: Maart 2007
  • Niet online
Het lijkt me dat je juist niets moet doen als je variabele leeg is? Zoals je het nu in je onderstaande code fragment hebt staan ga je juist iets doen wanneer de variabele leeg is

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 29-05 15:34

RRX

@life-

Topicstarter
ik222 schreef op maandag 15 december 2014 @ 09:57:
Het lijkt me dat je juist niets moet doen als je variabele leeg is? Zoals je het nu in je onderstaande code fragment hebt staan ga je juist iets doen wanneer de variabele leeg is
Hoezo?

Als ik deze code uitvoer:

PHP:
1
2
3
4
5
$teststring = "";

if(empty($teststring)){
    echo "De string is leeg!";
}


Dan geeft hij netjes "De string is leeg!" weer.

empty returned true wanneer de string leeg is:

http://php.net/manual/en/function.empty.php

edit:

Sorry ik begreep je verkeerd, maar het gaat er niet om of ik wel of niet wat wil doen wanneer de string leeg is (ik wil wel wat doen, namelijk de import afbreken en een waarschuwing geven dat de titel niet leeg mag zijn). Het gaat er om dat ik niet kan detecteren dat de string leeg is gezien er schijnbaar 6 karakters in staan die ik niet kan zien. Ik kan dus ook niet checken of deze wel of niet leeg is.

[ Voor 27% gewijzigd door RRX op 15-12-2014 10:08 ]

mijn T.net systeemspecspagina


  • Kenhas
  • Registratie: Oktober 2006
  • Laatst online: 16:06
en als je controleert met isset ?

Ken niet veel van php dus is mogelijk een zeer dom antwoord. In je tweede post wijs je effectief een waarde toe.

2x Marstek Venus E 5.12 v153 - CT003 V117 - BMS 212 en 215


  • RRX
  • Registratie: Mei 2000
  • Laatst online: 29-05 15:34

RRX

@life-

Topicstarter
Kenhas schreef op maandag 15 december 2014 @ 10:07:
en als je controleert met isset ?

Ken niet veel van php dus is mogelijk een zeer dom antwoord. In je tweede post wijs je effectief een waarde toe.
Dat help helaas ook niet, de string is namelijk aanwezig en er zitten 6 karakters in die ik niet kan zien?

mijn T.net systeemspecspagina


  • ik222
  • Registratie: Maart 2007
  • Niet online
RRX schreef op maandag 15 december 2014 @ 10:05:
[...]

Hoezo?

Als ik deze code uitvoer:

PHP:
1
2
3
4
5
$teststring = "";

if(empty($teststring)){
    echo "De string is leeg!";
}


Dan geeft hij netjes "De string is leeg!" weer.

empty returned true wanneer de string leeg is:

http://php.net/manual/en/function.empty.php

edit:

Sorry ik begreep je verkeerd, maar het gaat er niet om of ik wel of niet wat wil doen wanneer de string leeg is (ik wil wel wat doen, namelijk de import afbreken en een waarschuwing geven dat de titel niet leeg mag zijn). Het gaat er om dat ik niet kan detecteren dat de string leeg is gezien er schijnbaar 6 karakters in staan die ik niet kan zien. Ik kan dus ook niet checken of deze wel of niet leeg is.
Nou in je openingspost staat:

PHP:
1
2
3
if(empty($Artikel['titel'])){
 //doe iets
}


Daar ga je dus juist wat doen wanneer je variabele leeg is, dat kan maar ik zou het andersom verwachten. Maar goed daarom dacht ik dus even dat je het resultaat omdraaide.

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 20-11 22:36
ik222 schreef op maandag 15 december 2014 @ 10:12:
[...]

Nou in je openingspost staat:

PHP:
1
2
3
if(empty($Artikel['titel'])){
 //doe iets
}


Daar ga je dus juist wat doen wanneer je variabele leeg is, dat kan maar ik zou het andersom verwachten. Maar goed daarom dacht ik dus even dat je het resultaat omdraaide.
Huh, TS heeft toch niet uitgelegd wat hij met de code wil doen :? ? Er kunnen legio redenen zijn om juist wél iets te doen als een bepaalde variable leeg is.

  • BBrunekreeft
  • Registratie: Mei 2004
  • Laatst online: 23:15

BBrunekreeft

Dus...

Wat laat het onderstaande zien?
PHP: filename
1
 var_dump(addcslashes($Artikel['titel'], "\0..\37!@\@\177..\377"));


Het kan zijn dat er characters in je string zitten die niet afgedrukt kunnen worden.
addcslashes zet daar een slash voor.

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 29-05 15:34

RRX

@life-

Topicstarter
BBrunekreeft schreef op maandag 15 december 2014 @ 10:20:
Wat laat het onderstaande zien?
PHP: filename
1
 var_dump(addcslashes($Artikel['titel'], "\0..\37!@\@\177..\377"));


Het kan zijn dat er characters in je string zitten die niet afgedrukt kunnen worden.
addcslashes zet daar een slash voor.
Dit krijg ik terug:

code:
1
string(24) "\357\273\277\357\273\277"

mijn T.net systeemspecspagina


  • BBrunekreeft
  • Registratie: Mei 2004
  • Laatst online: 23:15

BBrunekreeft

Dus...

Dat ziet er uit als een UTF-8 Byte order mark
http://en.wikipedia.org/wiki/Byte_order_mark

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 29-05 15:34

RRX

@life-

Topicstarter
In de XML staan schijnbaar ook al die niet printbare karakters. Ik merk op dat wanneer ik de codering binnen notepad++ verander van UTF-8 naar ANSI ik ineens een paar rare tekens zie staan:
code:
1



Dan zou ik eigenlijk graag de niet-printbare karakters er uit willen filteren, want wat ik niet kan zien heb ik ook niets aan en daarna kan ik dan goed checken of de string leeg is.

mijn T.net systeemspecspagina


  • BBrunekreeft
  • Registratie: Mei 2004
  • Laatst online: 23:15

BBrunekreeft

Dus...

Ik kwam dit scriptje ergens tegen. Misschien iedere string hier doorheen halen?

PHP:
1
2
3
4
5
6
7
8
 //Remove UTF8 Bom

function remove_utf8_bom($text)
{
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 29-05 15:34

RRX

@life-

Topicstarter
BBrunekreeft schreef op maandag 15 december 2014 @ 10:38:
Ik kwam dit scriptje ergens tegen. Misschien iedere string hier doorheen halen?

PHP:
1
2
3
4
5
6
7
8
 //Remove UTF8 Bom

function remove_utf8_bom($text)
{
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}
Thanx, dit lijkt inderdaad te werken. het is wel zo dat dit script maar 1 BOM string weghaalt, ik moet 2 keer de preg_replace uitvoeren om ze er allebei uit te halen.

Ik ga maar eens praten met degene die de XML aanlevert, handiger wanneer ik deze gelijk zonder BOM krijg :)

mijn T.net systeemspecspagina

Pagina: 1