strtolower and mb_strtolower doesn't work - php

I have a variable in which a string is stored, which is supplied via an insert tag of the CMS Contao.
category = "{{page::title}}";
The value of the string is at this point "Fitness" with a big "F". I would like to have this string completely in lowercase letters.
I have already tried the following:
// 1
$category = "{{page::title}}";
echo strtolower($category);
// 2
$category = "{{page::title}}";
echo mb_strtolower($category);
// 3
$category = "{{page::title}}";
echo mb_strtolower($category, 'UTF-8');
But none of these approaches work and I still get "Fitness" with a big "F".
What am I doing wrong?

Insert Tags are replaced by Contao before the result is sent to the browser. You are trying to strtolower just the insert tag (which does nothing of course) - not the content it will be replaced by.
For your example you can use:
global $objPage;
echo strtolower($objPage->pageTitle ?: $objPage->title);
or
echo strtolower($GLOBALS['objPage']->pageTitle ?: $GLOBALS['objPage']->title);
or
echo strtolower(\Contao\Controller::replaceInsertTags('{{page::title}}'));

Related

Trying to grab value from html page but getting template back not the value - php

I am making a price crawler for a project but am running into a bit of an issue. I am using the below code to extract values from an html page:
$content = file_get_contents($_POST['url']);
$resultsArray = array();
$sqlresult = array();
$priceElement = explode( '<div>value I want to extract</div>' , $content );
Now when I use this to get certain elements I only get back
Finance: {{value * value2}}
I want to get the actual value that would be displayed on the screen e.g
Finance: 7.96
The other php methods I have tried are:
curl
file_get_html(using simple_html_dom library)
None of these work either :( Any ideas what I can do?
You just set the <div>value I want to extract</div> as a delimiter, which means PHP looks for it to separate your string to array whenever this occurs.
In the following code we use , character as a delimiter:
<?php
$string = "apple,banana,lemon";
$array = explode(',', $string);
echo $array[1];
?>
The output should be this:
banana
In your example you set the value you want to extract as a delimiter. That's why this happens to you. You'll need to set a delimiter between your string you want to obtain and other string you won't need at the moment.
For example:
<?php
$string = "iDontNeedThis-dontExtractNow-value I want to extract-dontNeedEither";
$priceElement = explode('-', $string);
echo "<div>".$priceElement[2]."</div>";
?>
The code should output this to your HTML page:
<div>value I want to extract</div>
And it will appear on your page like this:
value I want to extract
If you don't need to save the whole array in a variable, you can save the one index of it to variable instead:
$priceElement = explode('-', $string)[2];
echo $priceElement;
This will save only value I want to extract so you won't have to deal with arrays later on.

Create URL with only A-Z characters that includes variable and extension

I am trying to create file links based a variable which has a "prefix" and an extension at the end.
Here's what I have:
$url = "http://www.example.com/mods/" . ereg("^[A-Za-z_\-]+$", $title) . ".php";
Example output of what I wish to have outputted (assuming $title = testing;):
http://www.example.com/mods/testing.php
What it currently outputs:
http://www.example.com/mods/.php
Thanks in advance!
Perhaps this is what you need:
$title = "testing";
if(preg_match("/^[A-Za-z_\-]+$/", $title, $match)){
$url = "http://www.example.com/mods/".$match[0].".php";
}
else{
// Think of something to do here...
}
Now $url is http://www.example.com/mods/testing.php.
Do you want to keep letters and remove all other chars in the URL?
In this case the following should work:
$title = ...
$fixedtitle=preg_replace("/[^A-Za-z_-]/", "", $title);
$url = "http://www.example.com/mods/".$fixedtitle.".php";
the inverted character class will remove everything you do not want.
OK first it's important for you to realize that ereg() is deprecated and will eventually not be available as a command for php, so to prevent an error down the road you should use preg_match instead.
Secondly, both ereg() and preg_match output the status of the match, not the match itself. So
ereg("^[A-Za-z_\-]+$", $title)
will output an integer equal to the length of the string in $title, 0 if there's no match and 1 if there's a match but you didn't pass it another variable to store the matches in.
I'm not sure why it's displaying
http://www.example.com/mods/.php
It should actually be outputting
http://www.example.com/mods/1.php
if everything was working correctly. So there is something going on there, and it's definitely not doing what you want it to. You need to pass another variable to the function that will store all the matches found. If the match is successful (which you can check using the return value of the function) then that variable will be an array of all matches.
Note that with preg_match by default only the first match will be returned. but it will still generate an array (which can be used to get isolated portions of the match) whereas preg_match_all will match multiple things.
See http://www.php.net/manual/en/function.preg-match.php for more details.
Your regex looks more or less correct
So the proper code should look something like:
$title = 'testing'; //making sure that $title is what we think it is
if (preg_match('/^[A-Za-z_\-]+$/',$title,$matches)) {
$url = "http://www.example.com/mods/" . $matches[0] . ".php";
} else {
//match failed, put error code in here
}

Stripping text from url

Im trying to strip find_loc= and &cflt=pizza I got the majority stripped its just these last 2 things and whenever I try to use trim it doesn't delete it out it keeps saying array even when i try to print it, it says array.
<?php
$foo = 'http://www.yelp.com/search?find_loc=2190+W+Washington+Blvd%2C+Los+Angeles+90018&cflt=pizza ';
$blah = parse_url($foo);
$blah[query];
//the code above echos out find_loc=2190+W+Washington+Blvd%2C+Los+Angeles+90018&cflt=pizza
$thids = trim(''.$blah.'','find_loc=');
echo $thids;
?>
$thids = str_replace(array('&cflt=pizza','find_loc='), '', $blah);
parse_str($blah['query'], $query_vars); // decompose query string into components
unset($query_vars['find_loc']); // delete this particular query variable/value
unset($query_vars['cflt']);
$blah['query'] = http_build_query($query_vars); // rebuild the query string
$foo = http_build_url($blah); // rebuild the url

What am I doing wrong AJAX autocomplete tagging implementation?

I'm trying to do something similar to the way tags are added to questions on S/O using php/jquery.
$tagPart = $_POST['tagPart'];
$tagPart = strip_tags($tagPart,"");
$tagPart = trim($tagPart);
$tag_array = explode(',',$tagPart);
$lastTag = end($tag_array);
$part_query = "SELECT title FROM tag WHERE title LIKE '$lastTag%'";
$part_result = mysql_query($part_query) or die($lastTag);
while ($row = mysql_fetch_assoc($part_result)){
echo "<div id ='link' onclick = 'addText(\"".$row['title']."\");'>" . $row['title'] ."</div>";
}
This works well for adding the first tag..but doesn't show any results for the second tag after a comma is added...
so if i did PHP, JQuery for example...i would be able to add PHP but upon adding the , and the second tag the SQL query doesn't result in any results...i assume its probably matching the entire string and not just the last tag?
Try outputting your sql statement and check it for errors, extra spaces, etc.
$part_query = "SELECT title FROM tag WHERE title LIKE '$lastTag%'";
echo "sql statement: ".$part_query;
You trim $tagPart but maybe you need to trim $lastTag as well:
$lastTag = trim(end($tag_array));
Does $lastTag have a space in it? For example:
$tagPart = 'One, Two, Three';
$tag_array = explode(','$tagPart);
$lastTag = end($tag_array); //$lastTag = ' Three' -> notice the space!
I'm not a MySQL expert, so I'm not sure whether "LIKE" would automatically trim this off, but you may want to do $lastTag = trim(end($tag_array)). The fact that the first tag works would make sense if the space is the issue, because the first tag in the list doesn't have a preceding space.

Isolate part of url with php and then print it in html element

I am building a gallery in WordPress and I'm trying to grab a specific part of my URL to echo into the id of a div.
This is my URL:
http://www.url.com/gallery/truck-gallery-1
I want to isolate the id of the gallery which will always be a number(in this case its 1). Then I would like to have a way to print it somewhere, maybe in the form of a function.
You should better use $_SERVER['REQUEST_URI']. Since it is the last string in your URL, you can use the following function:
function getIdFromUrl($url) {
return str_replace('/', '', array_pop(explode('-', $url)));
}
#Kristian 's solution will only return numbers from 0-9, but this function will return the id with any length given, as long as your ID is separated with a - sign and the last element.
So, when you call
echo getIdFromUrl($_SERVER['REQUEST_URI']);
it will echo, in your case, 1.
If the ID will not always be the same number of digits (if you have any ID's greater than 9) then you'll need something robust like preg_match() or using string functions to trim off everything prior to the last "-" character. I would probably do:
<?php
$parts = parse_url($_SERVER['REQUEST_URI']);
if (preg_match("/truck-gallery-(\d+)/", $parts['path'], $match)) {
$id = $match[1];
} else {
// no ID found! Error handling or recovery here.
}
?>
Use the $_SERVER['REQUEST_URI'] variable to get the path (Note that this is not the same as the host variable, which returns something like http://www.yoursite.com).
Then break that up into a string and return the final character.
$path = $_SERVER['REQUEST_URI'];
$ID = $path[strlen($path)-1];
Of course you can do other types of string manipulation to get the final character of a string. But this works.

Categories