I generate a .doc html formated file from a PHP script. Everithing work fine, my file is well generated, but if I try to open it with LibreOffice (v4.2.8.2) the file is silently truncated to the 65533th character when displayed.
Is there a workaround ? Is it a bug ? Have you any informations about that?
I found the problem. All my text was within the <body> tag. I broke parts of my text within <div> and it worked (it won't work with html5 tags such as <article>).
I think that LibreOffice can't handle more than 65533 characters by tags.
In addition to that I also remarked the "same" problem in LibreOffice Calc, if you open a .xls file html formated, it will not display more than 65533 non empty cells (here I didn't find (/searched) a workaround).
I think it's a BIG bug with this software (I didn't test with other such as Ooo or MS Office). At least a warning message might be displayed.
Related
First I want to convert pdf file to html, but the api can't do that.
So I tried to convert pdf to txt. I have a lot of problems with multiple space or line...
So I tried (again) to convert pdf to word and word. The word is perfect.
Unfortunately, ConvertApi can't convert word to html... and I can found a free library to convert word to html.
So I tried (again and again) to convert word to txt.
Now I have accents problems on the txt file :
régime become r‚gime
matière become matiŠres
contrôle become contr“le
This is very bizarre. I have a .txt file on my Windows server. I'm using file_get_contents to retrieve it, but the first several characters show up as a diamond with a question make inside them. I've tried recreating the file from scratch and it's the same result. What's really bizarre is other files don't have this issue.
Also, if I put a * at the start of the file it seems to fix it, but if I try to open the file and do it with PHP it's still messed up.
The start of the file in question begins with: Trinity Cannon - that's a direct copy and paste from the text file. I've tried re-typing it and the first few characters are always that diamond with a question mark.
$myfile='C:\\inetpub\\wwwroot\\fastpitchscores\\data\\2020.txt';
$fh = file_get_contents($myfile);
echo $fh; // Trinity Cannon
echo $fh[0]; // �
It sounds like whatever editor you used to originally create the file a UTF Byte Order Mark at the beginning the file.
You typically can't edit the BOM from within an editor. If your editor has a encoding conversion functionality, try converting to ASCII. For example, in Notepad++ use Encoding->Encode in ANSI.
I'm having troubles with multiple html pages include.
I had main index.html but it started to be a bit too complex so I decided to split it in multiple html files and each one of them inport into single index.php using php.
index.php file
<?php
include('head.html');
include('header.html');
include('slideshow.html');
include('pictureGalery.html');
include('footer.html');
include('closer.html');
?>
using Google Chrome Developer Tool I found, that php includes included also some white spaces (you can see them in picture in between of divs header, content, container etc...
With a bit of googling I found some arciles about this problem, like:
PHP include causes white space at the top of the page (I can't use edit cmd command because I have win7 64-bit and it is not implemented there. You can only use "open notepad " command, but these whitespaces are not visible in notepad.
UTF-8 Without BOM?
PHP include() before doctype, causing a white space
I also tried to import reset.css file (http://meyerweb.com/eric/tools/css/reset/) but it didnt work either. The only way that seems to work for me is one that posted cebasso (https://stackoverflow.com/a/14362246/1784053). But I find this way a bit too agresive and unefective.
Any other ideas how to fix this problem?
Then, ends up this is caused by unexpected BOM on the file that are included:
For future reference, I just post the code used to check by PHP plainly.
print_r(array_map('dechex', array_map('ord', str_split(file_get_contents("xxxxxxxxxxxxx.html")))));
I would definitely prefer using Notepad++ or other software to save a non-BOM version,
but if still prefer using PHP to remove them, just use:
This removes first 3 characters in the file PERMANENTLY every time you execute it, so run once only.
$filename="xxxxxxx.html";
$filec = file_get_contents($filename);
file_put_contents($filename,substr($filec, 3, strlen($filec)));
Hopes it helps :D
Good luck!
I have the same problem before a moment. but when I see BOM characters, I think of a solution. Am not sure, but these characters for utf-8 encoding. I save my included file as ansi and the problems solved. also it's works fine with encode in utf-8 without BOM in Notepad++
Thanx
Regards
I'd look closely at your included files. Ensure that there is no white space at the top or bottom of every one of those documents. White space is not ignored by php and will definitely be included.
I have encountered a similar problem described here (and in other places) -
where as on an ajax callback I get a xmlhttp.responseText that seems ok (when I alert it - it shows the right text) - but when using an 'if' statement to compare it to the string - it returns false.
(I am also the one who wrote the server-side code returning that string) - after much studying the string - I've discovered that the string had an "invisible character" as its first character. A character that was not shown. If I copied it to Notepad - then deleted the first character - it won't delete until pressing Delete again.
I did a charCodeAt(0) for the returned string in xmlhttp.responseText. And it returned 65279.
Googling it reveals that it is some sort of a UTF-8 control character that is supposed to set "big-endian" or "small-endian" encoding.
So, now I know the cause of the problem - but... why does that character is being echoed?
In the source php I simply use
echo 'the string'...
and it apparently somehow outputs [chr(65279)]the string...
Why? And how can I avoid it?
To conclude, and specify the solution:
Windows Notepad adds the BOM character (the 3 bytes: EF BB BF) to files saved with utf-8 encoding.
PHP doesn't seem to be bothered by it - unless you include one php file into another -
then things get messy and strings gets displayed with character(65279) prepended to them.
You can edit the file with another text editor such as Notepad++ and use the encoding
"Encode in UTF-8 without BOM",
and this seems to fix the problem.
Also, you can save the other php file with ANSI encoding in notepad - and this also seem to work (that is, in case you actually don't use any extended characters in the file, I guess...)
If you want to print a string that contains the ZERO WIDTH NO-BREAK SPACE char (e.g., by including an external non-PHP file), try the following code:
echo preg_replace("/\xEF\xBB\xBF/", "", $string);
If you are using Linux or Mac, here is an elegant solution to get rid of the character in PHP.
If you are using WordPress (25% of Internet websites are powered by WordPress), the chances are that a plugin or the active theme are introducing the BOM character due a file that contains BOM (maybe that file was edited in Windows). If that's the case, go to your wp-content/themes/ folder and run the following command:
grep -rl $'\xEF\xBB\xBF' .
This will search for files with BOM. If you have .php results in the list, then do this:
Rename the file to something like filename.bom.bak.php
Open the file in your editor and copy the content in the clipbard.
Create a new file and paste the content from the clipboard.
Save the file with the original name filename.php
If you are dealing with this locally, then eventually you'd need to re-upload the new files to the server.
If you don't have results after running the grep command and you are using WordPress, then another place to check for BOM files is the /wp-content/plugins folder. Go there and run the command again. Alternatively, you can start deactivating all the plugins and then check if the problem is solved while you active the plugins again.
If you are not using WordPress, then go to the root of your project folder and run the command to find files with BOM. If any file is found, then run the four steps procedure described above.
You can also remove the character in javascript with:
myString = myString.replace(String.fromCharCode(65279), "" );
I had this problem and changed my encoding to utf-8 without bom, Ansi, etc with no luck. My problem was caused by using a php include function in the html body. Moving the include function to above my html (above !DOCTYPE tag) resolved the issue.
After I knew my issue I tested include, include_once and require functions. All attempts to include a file from within the html body created the extra miscellaneous 𐃁 character at the spot where the PHP code would start.
I also tried to assign the result of the include to a variable ... i.e $result = include("myfile.txt"); with the same extra character being added
Please note that moving the include above the HTML would not remove the extra character from showing, however it removes it from my data and out of the content area.
In addition to the above, I just had this issue when pulling some data from a MySQL database (charset is set to UTF-8) - the issue being the HTML tags, I allowed some basic ones like <p> and <a> when I displayed it on the page, I got the 𐃁 character looking through Dev Tools in Chrome.
So I removed the tags from the table and that removed the 𐃁 issue (and the blank line above the where the text was to be displayed.
I just wanted to add to this, since my Rep isn't high enough to actually comment on the answer.
EDIT: Using VIM I was able to remove the BOM with :set nobomb and you can confirm the presence of the BOM with :set bomb? which will display either bomb or nobomb
I use "Dreamweaver CC 2015", by default it has this option enabled: "include BOM signature" or something like that, when you click on save as option from file menu. In the window that apears, you can see "Unicode Options..". You can disable the BOM option. And remeber to change all your files like that. Or you can simply go to preferences and disable the BOM option and save all your files.
I'm using the PhpStorm IDE to develop php pages.
I had this problem and use this option of IDE to remove any BOM characters and problem solved:
File -> Remove BOM
Try to find options like this in your IDE.
Probably something on the server. If you know it's there, I would just bypass it until solved.
myString = myString.substring(1)
Chops off the first character.
When using atom it is a white space on the start of the document before <?php
A Linux solution to find and remove this character from a file is to use sed -i 's/\xEF\xBB\xBF//g' your-filename-here
My solution is create a php file with content:
<?php
header("Content-Type:text/html;charset=utf-8");
?>
Save it as ANSI, then other php file will require/include this before any html or php code
Here is my code, greatly truncated.
<?php
session_start();
header("Content-Type: application/msword");
header('Content-Disposition: attachment; filename="Contrat d\'étude.doc"');
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p align="right">Version: A</p>
<img src="img/logoPoly.png" alt="École Polytechnique de Montréal" />
<h1>CONTRAT D'ÉTUDES HORS QUÉBEC</h1>
............
I try here adding the image using the regular img tag, but once on the user's computer, the path doesn't work, obviously.. So how can I go about this?
And btw, is the meta tag the good way of setting the charset? Or is there a better way, perhaps using the php header function?
Thanks for helping out!
Is there something in your code you have truncated which converts all that HTML to an MS Word file?
Because... er... you know saving an HTML file with a .doc extension doesn't actually make it a Word file, right?
If you've got HTML, just serve it as HTML, and the user can take care of saving images using the browser's own ‘Save web page with images’ feature. Or you could write an MHTML file if you like, including the images inside it.
But HTML-file-hiding-under-DOC-file-extension isn't really a valid format. It's something you shouldn't rely on if Word manages to load/import the thing at all; asking for it to drag in images as well is asking for the moon on a stick.
Yes, meta is the only way to set charset when you're supplying an HTML file that you expect people to save. The Content-Type header is normally a good place to put it as well, but that information will be lost as soon as the file is saved on a filesystem that doesn't support saving type metadata (which is, currently, all popular filesystems).
Incidentally, non-ASCII characters like é are totally unreliable to include in a filename header parameter. They get treated as different encodings depending on the browser (and for IE, also the locale) and there's no standard way of escaping them. The only reliable way to put non-ASCII characters in the filename of a downloaded file is to leave them as trailing URL parts, encoded as UTF-8. eg.:
http://www.example.com/download.php/Contrat%20d%27%C3%A9tude.doc
Create your template on MS WORD(add some images), and save it as doc file. Open this file on notepad++ or smth code editor, copy all code into php file and add your php variables.
For adding image, you need to convert an image to base64 format. If you notice word file code, added images are some character-based format.