Nice article about the inputmode attribute

I wasn’t aware of the inputmode-attribute for input or textarea elements in HTML, but this excellent article on CSS-Tricks opened up a new world.

<input type=”text” inputmode=”numeric”>
on an Android device

Ensure your mobile users have a good experience by using inputmode rather than <input type="number" ...> etc. inputmode="numeric" can be used with maxlengthminlength and pattern attributes and therefore allows for a more controlled input.

Note: you probably want to add your own validation checks, as the browser will not do any validation with <input type="text" ...>.

How to ignore @ errors in a custom PHP error handler

In my PHP pages, I’m using a custom error handler, to make potential errors a bit more user-friendly. However, in some very particular cases, I don’t want an error to be raised (e.g. I’m logging all errors to a server file, but if writing to that file does not work for whatever reason, I don’t want to bother the user with it). In those cases, I’m using the @ error-control operator to ignore any error:
@error_log($error_trace.' ['.str_replace("\n",'\n',$error_message).'] ['.str_replace("\n",'\n',$error_data)."]\n",3,ERROR_LOG);

The @ error-control operator, However, even with @, the custom error handler is still triggered.

Thanks to this blog post I learned that error_reporting is 0 if the statement that caused the error was prepended by the @ error-control operator. So the solution is to add:
if (error_reporting() === 0) {
// continue script execution, skipping standard PHP error handler  (e.g.when using @ in front of an expression)
return true;
}

to the custom error handler

PHP setlocale depends on underlying system (XAMPP on Windows)

I’m maintaining a few websites, so I have a local webserver running to do testing and debugging. Until recently, I was using IIS on my Windows laptop. However, I ditched IIS a while ago, replacing it with XAMPP. This is much closer to the environment that’s running the websites (e.g. I can use .htaccess directly, rather than converting it to a web.config file).

This all worked fine, except for setlocale in PHP. I wanted to use Dutch (Belgian), but I could not get
setlocale(LC_ALL, 'nl_BE');
to work on my local machine.

I searched the web, but did not find any useful information. So I looked at the PHP setlocale helpinfo again, and noticed the Tip in the NotesWindows users will find useful information about locale strings at Microsoft’s MSDN website.

After checking, it turned out that Microsoft decided to go for another “standard”, so ‘nl_BE’ was not recognized. To use Dutch on Windows, I needed
setlocale(LC_ALL, 'nld_nld');

Oh well…