הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [בעיה] htmlentities בצ'ט (https://hosts.co.il/forums/showthread.php?t=77860)

SmartSeo 27-08-09 01:50

[בעיה] htmlentities בצ'ט
 
יש לי מערכת צ'ט בנוייה שאני רוצה להשתמש בה... הבעיה היא.. שכשכותבים בה הודעות באנגלית הכל סבבה. אבל כשכותבים בעברית זה יוצא סימני שאלה
הבעיה היא ב htmlentities

אלה השורות הבעייתיות:
PHP קוד:

    $nick=htmlentities(utf8_decode($v->user));
    
$msg=htmlentities(utf8_decode($v->message)); 

ניסיתי המון דברים וכולם לא עזר. אשמח לעזרה.

תודה

SmartSeo 28-08-09 16:59

מישהו? (מצטער על ההקפצה אבל עברו יומים)

Shay Ben Moshe 28-08-09 17:16

אני לא מאמין שהבעיה בhtmlentities אלא בutf8_decode. תנסה למחוק לרגע את הutf8_decode ותראה את הoutput..

SmartSeo 29-08-09 19:25

עדיין... סימני שאלה...
הנה כל הקובץ.
PHP קוד:

<?php
header
("Content-Type: text/plain; charset=windows-1255");

define('INSIDE'  true);
define('INSTALL' false);

$ugamela_root_path './';
include(
$ugamela_root_path 'extension.inc');
include(
$ugamela_root_path 'common.' $phpEx);

// blocking non-users
if ($IsUserChecked == false)
{
    
includeLang('login');
    
message($lang['Login_Ok'], $lang['log_numbreg']);
}

// The old messages are erased
$timemoment time();
$time_1h $timemoment 3600;

// One selects the messages present in the base of data
$query doquery("SELECT * FROM {{table}} ORDER BY messageid ASC"'chat');

while (
$v mysql_fetch_object($query))
{

    
$nick=htmlentities($v->user);
    
$msg=htmlentities($v->message);  
    
$pattern = array();
    
$replace = array();

    
// The different fonts (bold, italics, colors, etc ...)
    
$pattern[] = "#\[a=(https?|ftp|news)(.+)\](.+)\[/a\]#isU";
    
$replace[] = "<a href=\"$1$2\" target=\"_blank\">$3</a>";
    
    
$pattern[] = "#\[b\](.+)\[/b\]#isU";
    
$replace[] = "<b>$1</b>";
    
    
$pattern[] = "#\[i\](.+)\[/i\]#isU";
    
$replace[] = "<i>$1</i>";
    
    
$pattern[] = "#\[u\](.+)\[/u\]#isU";
    
$replace[] = "<u>$1</u>";
    
    
$pattern[] = "#\[c=(blue|yellow|green|pink|red|orange)\](.+)\[/c\]#isU";
    
$replace[] = "<font color=\"$1\">$2</font>";

    
// Smileys with their shortcuts
    
$pattern[] = "#:c#isU";
    
$replace[] = "<img src=\"images/smileys/cry.png\" align=\"absmiddle\" title=\":c\" alt=\":c\">";
    
    
$pattern[] = "#(?!http):/(?!/)#isU";
    
$replace[] = "<img src=\"images/smileys/confused.png\" align=\"absmiddle\" title=\":/\" alt=\":/\">";
    
    
$pattern[] = "#o0#isU";
    
$replace[] = "<img src=\"images/smileys/dizzy.png\" align=\"absmiddle\" title=\"o0\" alt=\"o0\">";
    
    
$pattern[] = "#\^\^#isU";
    
$replace[] = "<img src=\"images/smileys/happy.png\" align=\"absmiddle\" title=\"^^\" alt=\"^^\">";
    
    
$pattern[] = "#:D#isU";
    
$replace[] = "<img src=\"images/smileys/lol.png\" align=\"absmiddle\" title=\":D\" alt=\":D\">";
    
    
$pattern[] = "#:\|#isU";
    
$replace[] = "<img src=\"images/smileys/neutral.png\" align=\"absmiddle\" title=\":|\" alt=\":|\">";
    
    
$pattern[] = "#:\)#isU";
    
$replace[] = "<img src=\"images/smileys/smile.png\" align=\"absmiddle\" title=\":)\" alt=\":)\">";
    
    
$pattern[] = "#:o#isU";
    
$replace[] = "<img src=\"images/smileys/omg.png\" align=\"absmiddle\" title=\":o\" alt=\":o\">";
    
    
$pattern[] = "#:p#isU";
    
$replace[] = "<img src=\"images/smileys/tongue.png\" align=\"absmiddle\" title=\":p\" alt=\":p\">";
    
    
$pattern[] = "#:\(#isU";
    
$replace[] = "<img src=\"images/smileys/sad.png\" align=\"absmiddle\" title=\":(\" alt=\":(\">";
    
    
$pattern[] = "#;\)#isU";
    
$replace[] = "<img src=\"images/smileys/wink.png\" align=\"absmiddle\" title=\";)\" alt=\";)\">";
    
    
$pattern[] = "#:s#isU";
    
$replace[] = "<img src=\"images/smileys/shit.png\" align=\"absmiddle\" title=\":s\" alt=\":s\">";

    
$msg preg_replace($pattern$replace$msg);

    
// Message
    
$msg "<div align=left>{$nick}>{$msg}<br></div>";
    echo (
$msg);
}

?>


Shay Ben Moshe 29-08-09 19:31

מצד אחד header("Content-Type: text/plain; charset=windows-1255"); מצד שני אתה עובד בUTF8 תחליט.

AlmogBaku 30-08-09 06:01

The Chosen Generl - זו הסיבה שהוא עושה דהקודינג ולא אנקודינג.


הפתרון פשוט: הפונקציה utf8_decode והפונקציה utf8_encode בעייתיות, והם לא תומכות באופן מלא מכל הסימנים.
תשתמש בICONV

בעברית פשוטה תעשה ככה:
PHP קוד:

    $nick=htmlentities(iconv('utf8','windows-1255',$v->user));
    
$msg=htmlentities(iconv('utf8','windows-1255',$v->message)); 


SmartSeo 30-08-09 12:20

ציטוט:

נכתב במקור על ידי Baku (פרסם 736182)
The Chosen Generl - זו הסיבה שהוא עושה דהקודינג ולא אנקודינג.


הפתרון פשוט: הפונקציה utf8_decode והפונקציה utf8_encode בעייתיות, והם לא תומכות באופן מלא מכל הסימנים.
תשתמש בICONV

בעברית פשוטה תעשה ככה:
PHP קוד:

    $nick=htmlentities(iconv('utf8','windows-1255',$v->user));
    
$msg=htmlentities(iconv('utf8','windows-1255',$v->message)); 


לצערי יש עדיין סימני שאלה
הקוד:
PHP קוד:

<?php
header
("Content-Type: text/plain; charset=windows-1255");

define('INSIDE'  true);
define('INSTALL' false);

$ugamela_root_path './';
include(
$ugamela_root_path 'extension.inc');
include(
$ugamela_root_path 'common.' $phpEx);

// blocking non-users
if ($IsUserChecked == false)
{
    
includeLang('login');
    
message($lang['Login_Ok'], $lang['log_numbreg']);
}

// The old messages are erased
$timemoment time();
$time_1h $timemoment 3600;

// One selects the messages present in the base of data
$query doquery("SELECT * FROM {{table}} ORDER BY messageid ASC"'chat');

while (
$v mysql_fetch_object($query))
{

    
$nick=htmlentities(iconv('UTF-8''windows-1255'$v->user));
    
$msg=htmlentities(iconv('UTF-8''windows-1255'$v->message));
    
$pattern = array();
    
$replace = array();

    
// The different fonts (bold, italics, colors, etc ...)
    
$pattern[] = "#\[a=(https?|ftp|news)(.+)\](.+)\[/a\]#isU";
    
$replace[] = "<a href=\"$1$2\" target=\"_blank\">$3</a>";
    
    
$pattern[] = "#\[b\](.+)\[/b\]#isU";
    
$replace[] = "<b>$1</b>";
    
    
$pattern[] = "#\[i\](.+)\[/i\]#isU";
    
$replace[] = "<i>$1</i>";
    
    
$pattern[] = "#\[u\](.+)\[/u\]#isU";
    
$replace[] = "<u>$1</u>";
    
    
$pattern[] = "#\[c=(blue|yellow|green|pink|red|orange)\](.+)\[/c\]#isU";
    
$replace[] = "<font color=\"$1\">$2</font>";

    
// Smileys with their shortcuts
    
$pattern[] = "#:c#isU";
    
$replace[] = "<img src=\"images/smileys/cry.png\" align=\"absmiddle\" title=\":c\" alt=\":c\">";
    
    
$pattern[] = "#(?!http):/(?!/)#isU";
    
$replace[] = "<img src=\"images/smileys/confused.png\" align=\"absmiddle\" title=\":/\" alt=\":/\">";
    
    
$pattern[] = "#o0#isU";
    
$replace[] = "<img src=\"images/smileys/dizzy.png\" align=\"absmiddle\" title=\"o0\" alt=\"o0\">";
    
    
$pattern[] = "#\^\^#isU";
    
$replace[] = "<img src=\"images/smileys/happy.png\" align=\"absmiddle\" title=\"^^\" alt=\"^^\">";
    
    
$pattern[] = "#:D#isU";
    
$replace[] = "<img src=\"images/smileys/lol.png\" align=\"absmiddle\" title=\":D\" alt=\":D\">";
    
    
$pattern[] = "#:\|#isU";
    
$replace[] = "<img src=\"images/smileys/neutral.png\" align=\"absmiddle\" title=\":|\" alt=\":|\">";
    
    
$pattern[] = "#:\)#isU";
    
$replace[] = "<img src=\"images/smileys/smile.png\" align=\"absmiddle\" title=\":)\" alt=\":)\">";
    
    
$pattern[] = "#:o#isU";
    
$replace[] = "<img src=\"images/smileys/omg.png\" align=\"absmiddle\" title=\":o\" alt=\":o\">";
    
    
$pattern[] = "#:p#isU";
    
$replace[] = "<img src=\"images/smileys/tongue.png\" align=\"absmiddle\" title=\":p\" alt=\":p\">";
    
    
$pattern[] = "#:\(#isU";
    
$replace[] = "<img src=\"images/smileys/sad.png\" align=\"absmiddle\" title=\":(\" alt=\":(\">";
    
    
$pattern[] = "#;\)#isU";
    
$replace[] = "<img src=\"images/smileys/wink.png\" align=\"absmiddle\" title=\";)\" alt=\";)\">";
    
    
$pattern[] = "#:s#isU";
    
$replace[] = "<img src=\"images/smileys/shit.png\" align=\"absmiddle\" title=\":s\" alt=\":s\">";

    
$msg preg_replace($pattern$replace$msg);

    
// Message
    
$msg "<div align=left>{$nick}>{$msg}<br></div>";
    echo (
$msg);
}

?>


SmartSeo 31-08-09 11:10

הנה עוד 2 קבצים שקשורים אולי זה יעזור:
PHP קוד:

<?php

ob_start
();
echo <<<html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=windows-1255">
</head>
</html>
html;

define('INSIDE'  true);
define('INSTALL' false);

$ugamela_root_path './';
include(
$ugamela_root_path 'extension.inc');
include(
$ugamela_root_path 'common.' $phpEx);

    
includeLang('chat');
    
$BodyTPL gettemplate('chat_body');

    
$nick $user['username'];
    
$parse $lang;

    
$page parsetemplate($BodyTPL$parse);
    
display($page$lang['Chat'], false);


?>


והקובץ השני:
PHP קוד:

<?php



define
('INSIDE'  true);
define('INSTALL' false);

$ugamela_root_path './';
include(
$ugamela_root_path 'extension.inc');
include(
$ugamela_root_path 'common.' $phpEx);

    if (isset(
$_POST["msg"]) && isset($user['username'])) {
       
$nick trim (str_replace ("+","plus",$user['username']));
       
$msg  trim (str_replace ("+","plus",$_POST["msg"]));
       
$msg  addslashes ($_POST["msg"]);
       
$nick addslashes ($user['username']);
    }
    else {
       
$msg="";
       
$nick="";
    }

    if (
$msg!="" && $nick!="") {
       
$query doquery("INSERT INTO {{table}}(user, message, timestamp) VALUES ('".$nick."', '".$msg."', '".time()."')""chat");
    }

?>


SmartSeo 31-08-09 19:10

מצטער לא הצלחתי לערוך אז אני כותב בעוד הודעה:
מצאתי בקובץ השלישי שרשמתי פה את השורה $msg = addslashes ($_POST["msg"]); הפכתי אותה ל $msg = htmlentities(iconv('UTF-8', 'windows-1255', ($_POST["msg"])));

ועכשיו זה לא סימני שאלה אבל גם לא עברית:
זה &ugrave; עבור האות ש


כל הזמנים הם GMT +2. הזמן כעת הוא 11:09.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ