我正在制作一个PHP脚本来反转HTML文档中的文本,以处理转换严重的希伯来文PDF。 (叹气:))
一切正常,但脚本输出非常奇怪。只有一些字符,而不是希伯来字母,变成空白字符(带有问号的黑色钻石)。
我尝试了一些我能在SO及以后找到的解决方案,但没有改变。也许你可以开导我?
您可以在此处查看脚本:pilau.phpnet.us/html_invert.php,这是完整的源代码:
<!DOCTYPE html>
<html lang="he-IL">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="html_invert.php" method="post" enctype="application/x-www-form-urlencoded">
<textarea id="html_code" name="html_code" rows="30" cols="80"><?php
if (isset($_POST['html_code']))
{
function invert_string ($str) {
$new_str = '';
$i = strlen($str);
while ($i > 0) {
$new_str .= substr($str, --$i, 1);
}
return '>'.$new_str.'<';
}
echo htmlspecialchars(preg_replace('/>(\s*.*\s*)</imUue', 'invert_string("$1")', stripslashes($_POST['html_code'])));
}
else { echo 'paste your text here'; }
?></textarea>
<br />
<input type="submit" value="Process HTML" />
</form>
</body>
</html>
答案 0 :(得分:1)
我觉得charset看起来有问题。
在php.ini中查找default_charset,这可能设置为iso-8859-1。
编辑:现在我想起来了,你也可以尝试发送这个标题:
header('Content-Type: text/html; charset=utf-8');
答案 1 :(得分:0)
我想将这个问题标记为已回答,所以这里是解决方案,由Wooble和Matthew提供,如上述问题的评论所述:
我使用mb_substr('UTF-8')
和mb_strlen('UTF-8')
,并将stripslashes()
替换为此正则表达式:preg_replace(array('/\x5C(?!\x5C)/u', '/\x5C\x5C/u'), array('','\\'), $_POST['html_code'])
。
因此完整的代码如下:
<textarea id="html_code" name="html_code" rows="30" cols="80"><?php
if (isset($_POST['html_code']))
{
function add_delimiters ($str, $deli, $optional_suffix) {
return (isset($optional_suffix) ? $deli.$str.$optional_suffix : $deli.$str.$deli);
}
function reverse_string ($str) {
$new_str = '';
$i = mb_strlen($str, 'UTF-8');
while ($i > 0) {
$new_str .= mb_substr($str, --$i, 1, 'UTF-8');
}
return $new_str;
}
function utf_stripslashes ($str) {
return preg_replace(array('/\x5C(?!\x5C)/u', '/\x5C\x5C/u'), array('','\\'), $str);
}
function strip_blank_lines ($str) {
return preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/u", "\n", $str);
}
function reverse_html_content ($html) {
return preg_replace('/>(\s*.*\s*)</imUue', 'add_delimiters(reverse_string("$1"), ">", "<")', utf_stripslashes($html));
}
function clear_unsupported_css ($style) {
return preg_replace(array('/top:\s{0,1}([0-9]*(?!px));{0,1}/iu', '/left:\s{0,1}([0-9]*(?!px));{0,1}/iu'), array('top:$1px;', 'left:$1px;'), $style);
}
function process_inline_style ($html, $func) {
return preg_replace('/style="[a-zA-Z0-9:;\s{0,1}]*"/imUue', $func.'("$0")', $html);
}
echo strip_blank_lines(htmlspecialchars(process_inline_style(reverse_html_content($_POST['html_code']), 'clear_unsupported_css')));
}
else { echo 'paste your text here'; }
?></textarea>