French Characters Not Rendering Correctly

Background Knowledge


The MySQL database v4.0.23 is using the default character set of “Latin1″. When the database was created I had no knowledge of character sets other wise it would have been “UTF-8″.
The web pages are using a character set of “UTF-8″.

Problem


Data being queried from a MySQL database that contains French accent characters will not render correctly in the browser even after applying PHP htmlentities().

Example code: $string = htmlentities($string , ENT_QUOTES, “UTF-8″);

Solution


The queried data from the database was inputted using the character set “ISO-8859-1″. I found this out by changing the browser’s character encoding to “Western ISO-8859-1″ and the French accent characters then rendered properly. With the use of PHP iconv() I was able to convert the data from “ISO-8859-1″ to “UTF-8″ character set and the French characters then rendered properly in the browser.

Example code: $string = iconv(“ISO-8859-1″,”UTF-8″,”$string”);


If you are unaware of what MySQL default character set being used, you can run this SQL command “show variables like “%character%” and check your MySQL configuration file. Refer to the MySQL manual for further details.

PHP Calendar Functions Error

I was trying to use the PHP calendar API and immediately received this error message, “Fatal error: Call to undefined function cal_days_in_month()”. This error message means PHP was not compiled with the calendar extension.

Solution


The only solution to this error message and other similar error messages relating to the PHP calendar API requires PHP to be compiled with the calendar extension by adding “–enable-calendar” to the “configure command” as stated in the PHP documentation on the Calendar functions page.

How to Tell if the Calendar Extension is Installed


You can verify weather or not the PHP Calendar extension was compiled at install by using the phpinfo() function. When viewing the output of phpinfo() look under “Configure Command” just below “Build Date” and if you do not see “–enable-calendar” present then all PHP Calendar functions will not work.

Configure Example


./configure –with-mysql=/usr/local –with-mssql=/usr/local –with-apxs –with-zlib-dir=/usr/lib –with-libxml-dir=/usr/local –with-config-file-path=/var/www/conf –with-iconv=/usr/local/bin/iconv –enable-exif –-enable-mbstring –enable-calendar

PHP Free Chat – Joining Chat Email Notification

I recently upgraded an install of PHP Free Chat to that latest version of 1.0 Final. However it was still lacking a feature to notify individual(s) that someone has joined the chat if they were not already in the chat application to begin with. I came across a posting explaining how to achieve this in PHP Free Chat at PHP Free Chat Forum. After a little reading and discussion I was able to implement the feature.

Here’s my modified version for the solution based on the forum posting. The pfcmail() function can be made to be way more versatile for any use, however for my use it was made to be simple and produce properly formated email messages.

Solution


  1. Create a new PHP file called pfcmail.php with the following lines of code.
  2. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    < ?php
    function pfcmail($szChannel,$szNickname)
    {
    	$szCurrentDateTime = date('F j, Y @ g:i:sa', time());
    	$szClientIP = getenv("REMOTE_ADDR");
    	$szHostName = gethostbyaddr("$szClientIP");
    	$szServerName = getenv("SERVER_NAME");
    	$szEmailWebmaster = getenv("SERVER_ADMIN");
     
    	$szEmailTo = "Webmaster <$szEmailWebmaster>";
    	$szMsgHeaders = "From: $szEmailWebmaster\r\n";
    	$szMsgHeaders .= "X-Mailer: PHP\r\n";
    	$szMsgHeaders .= "MIME-Version: 1.0\r\n";
    	$szMsgHeaders .= "Content-type: text/plain; charset=UTF-8";
    	$szMsgSubject = "[WEB] Chat Login - $szNickname in channel $szChannel at $szCurrentDateTime";
     
    	$szMsgBody = "Date\t\t\t\t: $szCurrentDateTime\n";
    	$szMsgBody .= "Server Name\t\t\t: $szServerName\n";
    	$szMsgBody .= "Client IP\t\t\t: $szClientIP\n";
    	$szMsgBody .= "Client Hostname\t\t: $szHostName\n\n";
     
    	$szMsgBody .= "Join chat now by going to http://$szServerName/chat/index.php.\n\n";
     
    	$szMsgBody .= "---\n";
    	$szMsgBody .= "Email message auto-generated by PHP mail().";
     
    	$nSendEmail = mail($szEmailTo, $szMsgSubject, $szMsgBody, $szMsgHeaders);
    }
    ?>
    Note: The extra r, n and t’s should have a \ character before them to produce a carriage return, new line and tab. WordPress appears to remove the character.
  3. Make sure to modifiy the code in pfcmail.php for the To, from, subject and body of the email message to your requirements.
  4. Save pfcmail.php file into the following path, /src/commands/.
  5. Edit /src/commands/nick.class.php at line number 84, just before “return true;” add the following code and save.
  6. require_once(dirname(__FILE__).”/pfcmail.php”);
    pfcmail($c->title, $newnick);

You should now be receiving email notifications each time an individual joins chat.

PEAR::HTML_BBCodeParser Upgrade 1.1 to 1.2.2

Problem #1 – “[notice] child pid 13449 exit signal Segmentation fault (11)”

On a OpenBSD v3.7 i386 system running Apache v1.3.29 (not chrooted) with PHP v5.1.4 I upgraded HTML_BBCodeParser from version 1.1 to version 1.2.2 by running at command line “pear upgrade-all”. After the upgrades were complete the web site would not load a web page anymore. I looked at my HTTPD server logs and noticed I was receiving the following error message in error_log file, “[notice] child pid 13449 exit signal Segmentation fault (11)” whenever there was a HTTP request on port 80 or 443 to the web site. I couldn’t understand what the problem could be but then decided to uninstall HTML_BBCodeParser v1.2.2 and re-install HTML_BBCodeParser v1.1 to see if the web site would still function. Indeed the web site did load and function fine. So I decided to uninstall and install each version up to v1.2.2 to see where the breaking point was. As soon as the latest version of HTML_BBCodeParser v1.2.2 is installed the web site stops functioning. I was able to determine that there was something that has changed in v1.2.2 or something I did wrong in the Filters I created and existing filters I altered.

Solution #1

I uninstalled HTML_BBCodeParser then manually removed the directory /usr/local/lib/php/HTML/HTML_BBCodeParser. Then I installed HTML_BBCodeParser v1.2.2 and copied the BBCodeParser.ini example from /usr/local/lib/php/doc/HTML_BBCodeParser/BBCodeParser/example/ to /usr/local/lib/php/HTML/BBCodeParse/. After that the web site functioned as normal again.

Problem #2 – “Warning: strpos() [function.strpos]: Empty delimiter.”

However I discovered that when using PHP 5 one has to alter the BBCodeParser.ini file otherwise you will receive the following warning message when trying to load a web page using HTML_BBCodeParser, “Warning: strpos() [function.strpos]: Empty delimiter. in /usr/local/lib/php/HTML/BBCodeParser.php on line 354″.

Solution #2

Edit your BBCodeParser.ini and alter the line for the opening tag character and closing tag character to be enclosed by double quotes around the square brackets, [ and ]. Apparently this has been an issue for awhile now, http://pear.php.net/bugs/bug.php?id=2580.

Example After Alteration – BBCodeParser.ini

[HTML_BBCodeParser]

; possible values: single|double
; use single or double quotes for attributes
quotestyle = single

; possible values: all|nothing|strings
; quote all attribute values, none, or only the strings
quotewhat = all

; the opening tag character
open = "["

; the closing tag character
close = "]"

; possible values: true|false
; use xml style closing tags for single html tags ( or )
xmlclose = true

; possible values: a comma seperated list of filters
; comma seperated list of filters to use
filters = Basic,Extended,Links,Images,Lists,Email