单个 PHP 函数用表情符号或过滤词替换文本
Single PHP Function To Replace Text With Emoticons Or Filter Words
所以我试图找到一种方法来构建一个函数,如果文本是表情符号,它将用图像替换文本,如果是禁止的词,则用过滤词替换。
我看过这段代码:
$smiles = array(
'xD' => 'devil.png',
'>:)' => 'devil.png',
'x(' => 'angry.png',
':((' => 'cry.png',
':*' => 'kiss.png',
':))' => 'laugh.png',
':D' => 'laugh.png',
':-D' => 'laugh.png',
':x' => 'love.png',
'(:|' => 'sleepy.png',
':)' => 'smile.png',
':-)' => 'smile.png',
':(' => 'sad.png',
':-(' => 'sad.png',
';)' => 'wink.png',
';-)' => 'wink.png'
);
foreach($smiles as $key => $img) {
$msg = str_replace($key, '<img src="emotions/'.$img.'" height="18" width="18" />', $msg);
}
echo $msg;
这看起来很简单,但是如果我想添加类似 'BadWord1' => '********'
的内容怎么办?
我知道如何将它添加到此脚本中,因为我只会添加新行,但它会尝试将其转换为图像。
是否可以编写一个同时替换文本和图像的函数?
在很长一段时间内,我还想删除 textarea 换行符并将它们替换为 <br>
而不是使用 $val = str_replace( array("\n","\r","\r\n"), '<br />', $val );
之类的东西
但我似乎想不出一种方法可以在一个功能中完成所有这三个功能。
我的主要目标是在提交文本区域时将文本调用到 replaceText($textareaText)
之类的函数,并且文本中需要替换的任何内容都会被替换。
我需要单独的函数吗?
我将继续自己解决这个问题,所以如果我想出任何可能的进展,我会更新我的问题以包含它。
编辑:这是我想出的。您认为这足够了吗?
function replaceText($msg) {
$replaceableText = array(
'xD' => '<img src="emoticons/devil.png" height="18" width="18">',
'>:)' => '<img src="emoticons/devil.png" height="18" width="18">',
'x(' => '<img src="emoticons/angry.png" height="18" width="18">',
':((' => '<img src="emoticons/cry.png" height="18" width="18">',
':*' => '<img src="emoticons/kiss.png" height="18" width="18">',
':))' => '<img src="emoticons/laugh.png" height="18" width="18">',
':D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':-D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':x' => '<img src="emoticons/love.png" height="18" width="18">',
'(:|' => '<img src="emoticons/sleepy.png" height="18" width="18">',
':)' => '<img src="emoticons/smile.png" height="18" width="18">',
':-)' => '<img src="emoticons/smile.png" height="18" width="18">',
':(' => '<img src="emoticons/sad.png" height="18" width="18">',
':-(' => '<img src="emoticons/sad.png" height="18" width="18">',
';)' => '<img src="emoticons/wink.png" height="18" width="18">',
';-)' => '<img src="emoticons/wink.png" height="18" width="18">',
'\n' => '<br>',
'\r' => '<br>',
'\r\n' => '<br>',
'\n\r' => '<br>',
'badword1' => '********',
'badword2' => '********'
);
foreach($replaceableText as $replace => $replacedWith) {
$msg = str_replace($replace, $replacedWith, $msg);
}
return $msg;
}
编辑 2:
我之前忘了提到这一点,但这是针对 HTML 电子邮件脚本的。
这样我可以输入一些简单的东西,例如 <h1>
,它会自动转换为带有预设内联样式的 header 标签。
也许是这样的:
function replaceText($msg) {
$replaceableText = array(
'xD' => '<img src="emoticons/devil.png" height="18" width="18">',
'>:)' => '<img src="emoticons/devil.png" height="18" width="18">',
'x(' => '<img src="emoticons/angry.png" height="18" width="18">',
':((' => '<img src="emoticons/cry.png" height="18" width="18">',
':*' => '<img src="emoticons/kiss.png" height="18" width="18">',
':))' => '<img src="emoticons/laugh.png" height="18" width="18">',
':D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':-D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':x' => '<img src="emoticons/love.png" height="18" width="18">',
'(:|' => '<img src="emoticons/sleepy.png" height="18" width="18">',
':)' => '<img src="emoticons/smile.png" height="18" width="18">',
':-)' => '<img src="emoticons/smile.png" height="18" width="18">',
':(' => '<img src="emoticons/sad.png" height="18" width="18">',
':-(' => '<img src="emoticons/sad.png" height="18" width="18">',
';)' => '<img src="emoticons/wink.png" height="18" width="18">',
';-)' => '<img src="emoticons/wink.png" height="18" width="18">',
'\n' => '<br>',
'\r' => '<br>',
'\r\n' => '<br>',
'\n\r' => '<br>',
'badword1' => '********',
'badword2' => '********',
'<h1>' => '<h1 style="InlineStylesForHTMLEmail">'
);
foreach($replaceableText as $replace => $replacedWith) {
$msg = str_replace($replace, $replacedWith, $msg);
}
return $msg;
}
[edit] 抱歉,如果这是我的项目,我会情不自禁地按照我的方式去做。一个可重复的非冗余过程。
$array = [
'<img src="emoticons/{{value}}" height="18" width="18">' => [
':)' => 'smile.png',
';)' => 'wink.png'
],
'<br>' => ['\n', '\r'],
'****' => ['4lettercussword', '4lettercussword'],
'*****' => '5lettercussword'
];
function filterText($array, &$msg) {
foreach($array as $key => $value) {
if(is_array($value)) {
if(array_keys($value) !== range(0, count($value) - 1)) {
foreach($value as $k => $v) {
$msg = str_replace($k, str_replace('{{value}}', $v, $key), $msg);
}
} else {
for($i = 0;$i < count($value);$i++) {
$msg = str_replace($value[$i], $key, $msg);
}
}
} else {
$msg = str_replace($value, $key, $msg);
}
}
}
$msg = '4lettercussword :) \n';
filterText($array, $msg);
echo $msg;
输出:
**** <img src="emoticons/smile.png" height="18" width="18"> <br>
数组中的键将替换值。如果键包含 {{value}} 标识符,那么它知道指向的数组将是关联的,并且它需要从该数组中获取值并将其插入键中的 {{value}} 标识符。如果任何键等于一个简单的值数组,它将用该键替换这些值中的任何一个。这总是你有不同的 html 标签,并只用键值 str_replace.
替换它的一部分
nl2br
将在字符串中的所有换行符之前插入 HTML 换行符。
这是我的代码片段。
function replaceText($val)
{
$search = array(
'xD',
'>:)',
'x(',
':((',
':*',
':))',
':D',
':-D',
':x',
'(:|',
':)',
':-)',
':(',
':-(',
';)',
';-)',
'Badword1'
);
$replace = array(
'<img src="emotions/devil.png" height="18" width="18" />',
'<img src="emotions/devil.png" height="18" width="18" />',
'<img src="emotions/angry.png" height="18" width="18" />',
'<img src="emotions/cry.png" height="18" width="18" />',
'<img src="emotions/kiss.png" height="18" width="18" />',
'<img src="emotions/laugh.png" height="18" width="18" />',
'<img src="emotions/laugh.png" height="18" width="18" />',
'<img src="emotions/laugh.png" height="18" width="18" />',
'<img src="emotions/love.png" height="18" width="18" />',
'<img src="emotions/sleepy.png" height="18" width="18" />',
'<img src="emotions/smile.png" height="18" width="18" />',
'<img src="emotions/smile.png" height="18" width="18" />',
'<img src="emotions/sad.png" height="18" width="18" />',
'<img src="emotions/sad.png" height="18" width="18" />',
'<img src="emotions/wink.png" height="18" width="18" />',
'<img src="emotions/wink.png" height="18" width="18" />',
'********'
);
$val = str_replace( $search, $replace, $val );
$val = nl2br($val);
return $val;
}
replaceText($textareaText);
所以我试图找到一种方法来构建一个函数,如果文本是表情符号,它将用图像替换文本,如果是禁止的词,则用过滤词替换。
我看过这段代码:
$smiles = array(
'xD' => 'devil.png',
'>:)' => 'devil.png',
'x(' => 'angry.png',
':((' => 'cry.png',
':*' => 'kiss.png',
':))' => 'laugh.png',
':D' => 'laugh.png',
':-D' => 'laugh.png',
':x' => 'love.png',
'(:|' => 'sleepy.png',
':)' => 'smile.png',
':-)' => 'smile.png',
':(' => 'sad.png',
':-(' => 'sad.png',
';)' => 'wink.png',
';-)' => 'wink.png'
);
foreach($smiles as $key => $img) {
$msg = str_replace($key, '<img src="emotions/'.$img.'" height="18" width="18" />', $msg);
}
echo $msg;
这看起来很简单,但是如果我想添加类似 'BadWord1' => '********'
我知道如何将它添加到此脚本中,因为我只会添加新行,但它会尝试将其转换为图像。
是否可以编写一个同时替换文本和图像的函数?
在很长一段时间内,我还想删除 textarea 换行符并将它们替换为 <br>
而不是使用 $val = str_replace( array("\n","\r","\r\n"), '<br />', $val );
但我似乎想不出一种方法可以在一个功能中完成所有这三个功能。
我的主要目标是在提交文本区域时将文本调用到 replaceText($textareaText)
之类的函数,并且文本中需要替换的任何内容都会被替换。
我需要单独的函数吗?
我将继续自己解决这个问题,所以如果我想出任何可能的进展,我会更新我的问题以包含它。
编辑:这是我想出的。您认为这足够了吗?
function replaceText($msg) {
$replaceableText = array(
'xD' => '<img src="emoticons/devil.png" height="18" width="18">',
'>:)' => '<img src="emoticons/devil.png" height="18" width="18">',
'x(' => '<img src="emoticons/angry.png" height="18" width="18">',
':((' => '<img src="emoticons/cry.png" height="18" width="18">',
':*' => '<img src="emoticons/kiss.png" height="18" width="18">',
':))' => '<img src="emoticons/laugh.png" height="18" width="18">',
':D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':-D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':x' => '<img src="emoticons/love.png" height="18" width="18">',
'(:|' => '<img src="emoticons/sleepy.png" height="18" width="18">',
':)' => '<img src="emoticons/smile.png" height="18" width="18">',
':-)' => '<img src="emoticons/smile.png" height="18" width="18">',
':(' => '<img src="emoticons/sad.png" height="18" width="18">',
':-(' => '<img src="emoticons/sad.png" height="18" width="18">',
';)' => '<img src="emoticons/wink.png" height="18" width="18">',
';-)' => '<img src="emoticons/wink.png" height="18" width="18">',
'\n' => '<br>',
'\r' => '<br>',
'\r\n' => '<br>',
'\n\r' => '<br>',
'badword1' => '********',
'badword2' => '********'
);
foreach($replaceableText as $replace => $replacedWith) {
$msg = str_replace($replace, $replacedWith, $msg);
}
return $msg;
}
编辑 2:
我之前忘了提到这一点,但这是针对 HTML 电子邮件脚本的。
这样我可以输入一些简单的东西,例如 <h1>
,它会自动转换为带有预设内联样式的 header 标签。
也许是这样的:
function replaceText($msg) {
$replaceableText = array(
'xD' => '<img src="emoticons/devil.png" height="18" width="18">',
'>:)' => '<img src="emoticons/devil.png" height="18" width="18">',
'x(' => '<img src="emoticons/angry.png" height="18" width="18">',
':((' => '<img src="emoticons/cry.png" height="18" width="18">',
':*' => '<img src="emoticons/kiss.png" height="18" width="18">',
':))' => '<img src="emoticons/laugh.png" height="18" width="18">',
':D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':-D' => '<img src="emoticons/laugh.png" height="18" width="18">',
':x' => '<img src="emoticons/love.png" height="18" width="18">',
'(:|' => '<img src="emoticons/sleepy.png" height="18" width="18">',
':)' => '<img src="emoticons/smile.png" height="18" width="18">',
':-)' => '<img src="emoticons/smile.png" height="18" width="18">',
':(' => '<img src="emoticons/sad.png" height="18" width="18">',
':-(' => '<img src="emoticons/sad.png" height="18" width="18">',
';)' => '<img src="emoticons/wink.png" height="18" width="18">',
';-)' => '<img src="emoticons/wink.png" height="18" width="18">',
'\n' => '<br>',
'\r' => '<br>',
'\r\n' => '<br>',
'\n\r' => '<br>',
'badword1' => '********',
'badword2' => '********',
'<h1>' => '<h1 style="InlineStylesForHTMLEmail">'
);
foreach($replaceableText as $replace => $replacedWith) {
$msg = str_replace($replace, $replacedWith, $msg);
}
return $msg;
}
[edit] 抱歉,如果这是我的项目,我会情不自禁地按照我的方式去做。一个可重复的非冗余过程。
$array = [
'<img src="emoticons/{{value}}" height="18" width="18">' => [
':)' => 'smile.png',
';)' => 'wink.png'
],
'<br>' => ['\n', '\r'],
'****' => ['4lettercussword', '4lettercussword'],
'*****' => '5lettercussword'
];
function filterText($array, &$msg) {
foreach($array as $key => $value) {
if(is_array($value)) {
if(array_keys($value) !== range(0, count($value) - 1)) {
foreach($value as $k => $v) {
$msg = str_replace($k, str_replace('{{value}}', $v, $key), $msg);
}
} else {
for($i = 0;$i < count($value);$i++) {
$msg = str_replace($value[$i], $key, $msg);
}
}
} else {
$msg = str_replace($value, $key, $msg);
}
}
}
$msg = '4lettercussword :) \n';
filterText($array, $msg);
echo $msg;
输出:
**** <img src="emoticons/smile.png" height="18" width="18"> <br>
数组中的键将替换值。如果键包含 {{value}} 标识符,那么它知道指向的数组将是关联的,并且它需要从该数组中获取值并将其插入键中的 {{value}} 标识符。如果任何键等于一个简单的值数组,它将用该键替换这些值中的任何一个。这总是你有不同的 html 标签,并只用键值 str_replace.
替换它的一部分nl2br
将在字符串中的所有换行符之前插入 HTML 换行符。
这是我的代码片段。
function replaceText($val)
{
$search = array(
'xD',
'>:)',
'x(',
':((',
':*',
':))',
':D',
':-D',
':x',
'(:|',
':)',
':-)',
':(',
':-(',
';)',
';-)',
'Badword1'
);
$replace = array(
'<img src="emotions/devil.png" height="18" width="18" />',
'<img src="emotions/devil.png" height="18" width="18" />',
'<img src="emotions/angry.png" height="18" width="18" />',
'<img src="emotions/cry.png" height="18" width="18" />',
'<img src="emotions/kiss.png" height="18" width="18" />',
'<img src="emotions/laugh.png" height="18" width="18" />',
'<img src="emotions/laugh.png" height="18" width="18" />',
'<img src="emotions/laugh.png" height="18" width="18" />',
'<img src="emotions/love.png" height="18" width="18" />',
'<img src="emotions/sleepy.png" height="18" width="18" />',
'<img src="emotions/smile.png" height="18" width="18" />',
'<img src="emotions/smile.png" height="18" width="18" />',
'<img src="emotions/sad.png" height="18" width="18" />',
'<img src="emotions/sad.png" height="18" width="18" />',
'<img src="emotions/wink.png" height="18" width="18" />',
'<img src="emotions/wink.png" height="18" width="18" />',
'********'
);
$val = str_replace( $search, $replace, $val );
$val = nl2br($val);
return $val;
}
replaceText($textareaText);