Jump to content


Photo

Str_truncate()


  • Faça o login para participar
25 replies to this topic

#16 kurt_rp

kurt_rp

    12 Horas

  • Usuários
  • 140 posts
  • Sexo:Masculino
  • Localidade:Rio Grande do Sul
  • Interesses:Programação web e designer.

Posted 23/08/2006, 15:45

Aeee.. vlw Eclesiastes..
Coloquei aki a função antes de entra no while do select.. chamei so a variavel dentro do laço.. e dai funcionou... mas so com texto puro.. sem codigos html junto no banco...

Agora estou enfrentando esse problema... pois como disse antes eu uso uma barra d formatação d texto parecida com esse do forum.. e com isso ele vai inserindo os cods html junto com o texto.. e dai essa função nao funciona direito.


Sera q teria como contorna isso.. sei la.. alguma condição pra separa o cod "html" do "texto"???


Tipo a função "htmlentities"... so q depois eu queria q voltasse o texto normal com os cods.. pra nao ficar o cod html aparecendo na pagina...

Edição feita por: kurt_rp, 23/08/2006, 18:00.

|| PLUG CIDADE || - O portal turistico do vale do Rio Pardo
http://www.plugcidade.com.br

|| PLUG BALADA || - O portal de festas do vale do Rio Pardo
http://www.plugbalada.com.br

#17 Impossivel

Impossivel

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Masculino
  • Localidade:Floripa-SC

Posted 23/03/2007, 20:58

ola, eu precisei exibir um resumo em meu site, mas em uma pagina com WHILE, entao precisei ordenar o codigo, como acho que é isto que kurt_rp ta precisando, estou postando. ficou assim,


...
#aqui faz a busca pro WHILE
$query = "SELECT * FROM $tabela ORDER BY $id DESC";
$result = @mysql_query($query);

#aqui define o codigo str_truncate
define("TRUNC_BEFORE_LENGHT", 0);
define("TRUNC_AFTER_LENGHT", 1);
function str_truncate($str, $length, $rep=TRUNC_BEFORE_LENGHT)
{
if(strlen($str)<=$length) return $str;
if($rep == TRUNC_BEFORE_LENGHT) $oc = strrpos(substr($str,0,$length),' ');
if($rep == TRUNC_AFTER_LENGHT) $oc = strpos(substr($str,$length),' ') + $length;
return substr($str, 0, $oc);
}

#aqui começa o codigo WHILE para criar as 'linhas'
while ($row = mysql_fetch_assoc($result))
{

echo " o resultado da busca na tabela ";
print str_truncate($conto, 45, TRUNC_AFTER_LENGHT) . '...';
echo " aqui continua se precisar mais informações na sequencia. ";
}

#18 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 24/10/2007, 15:23

Aeee.. vlw Eclesiastes..
Coloquei aki a função antes de entra no while do select.. chamei so a variavel dentro do laço.. e dai funcionou... mas so com texto puro.. sem codigos html junto no banco...

Agora estou enfrentando esse problema... pois como disse antes eu uso uma barra d formatação d texto parecida com esse do forum.. e com isso ele vai inserindo os cods html junto com o texto.. e dai essa função nao funciona direito.


Sera q teria como contorna isso.. sei la.. alguma condição pra separa o cod "html" do "texto"???


Tipo a função "htmlentities"... so q depois eu queria q voltasse o texto normal com os cods.. pra nao ficar o cod html aparecendo na pagina...


Talvez a funcão strip_tags() seja útil para você.

Até mais ^_^

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#19 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 09/02/2008, 00:13

Ressuscitando mas por uma boa causa :D

Meus textos guardados no bd estão todos em utf8 e os caracteres especiais tbm estão devidademente com suas entities e tals...

O problema é parecido com o do amigo mais acima, só que não envolve html

tipo quando busca no bd um texto que e acontece de exatamente aonde eu defini para cortar... ( exemplo 100 caracteres ) cortar numa palvra antes de fechar o entities

Exemplo

Eu tomo 3 ch&iacute;caras de caf&eacute;

E da ao acaso de cortar bem em algum caracter de &eacute; dará o problema... mostrando o famoso <?> de caracter não reconhecido

O que seria uma boa solução?

Talvez rodar a função normalmente e depois da string transformada ler de tras pra diante até chegar no primeiro espaço aí teremos a última ocorrência e verificar se na última posição desta ocorrência há caracteres especiais e substituir por nada...

Paliativo, contraditório, já que no caso da chapeuzinho o xxxxxx é C&uacute; e sendo assim contradiz a proposta da função ficando na mesma mas pelo menos não irá mostrar os erros quando ocorrer situações como aquela.

Vou tentar fazer alguma ciosa...

Meu problema se dá pois uso utf8 unicode nas tabelas e campos... e charset dos arquivos tbm... e é obrigatório usar entities se não me volta o caracter de não reconhecido.

Enfim ... vai ser osso duro :D hehehe

Independente disso a sua função é muito boa e uso ela freqüentemente.

Obrigado mesmo assim por disponibiliza-la por tanto tempo.

(y)Até mais

#20 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 09/02/2008, 14:40

Olá Crab,

e você não pode converter para ISO e aplicar html_entity_decode()?
Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29

#21 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 09/02/2008, 19:31

E aí Felipe, beleza...

Então... eu já havia lido sobre e pensado nessa hipótese antes... inclusive brinquei um pouco com essa função aí...

Mas pensar em converter tudo para ISO chega da um desanimo... o cara lá é meio que vai com as outras e quer xhtml validando

sei lá porque entrei numas de usar utf em tudo e fazer funcionar :D

Pelo visto terei que passar por essa barreira de outra forma... tipo gambi mesmo :D Até mais

#22 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 19/02/2008, 14:07

function str_truncate($str, $length, $rep = 0) {
	$str = html_entity_decode($str, ENT_QUOTES, 'ISO-8859-1');
	$oc = ($rep == 0) ? strrpos(substr($str,0,$length),' ') : (strpos(substr($str,$length),' ') + $length);
	return (strlen($str) > $length) ? htmlentities(substr($str, 0, $oc), ENT_QUOTES, 'ISO-8859-1'). '...' : $str;
}

Sò é um saco o html_entity_decode() ... ele tem 50% de chance de não funcionar direito, dependendo de como vem a String e de como está configurado o php.

:D

Edição feita por: savior, 19/02/2008, 14:08.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#23 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 11/03/2008, 19:37

Pode crer Felipe ...

savior... fiz uns testes hoje só hehehehe

Resultados

... da forma que vc mostrou ali... para o meu caso... quando a string está diretamente no arquivo

$string = "As beldades s&atilde;o sempre uma atra&ccedil;&atilde;o &agrave; parte nas competi&ccedil;&atilde;es de surf, principalmente quando o palco das disputas fica situado na regi&atilde;o Sul do Brasil.";

... aplica a função... Funciona perfeitamente...

(y)

mas...
quando estou trazendo a string do banco de dados com codificação utf-8 unicode não posso usar o htmlentities()

Pois os caracteres ficam todos errados, independente de ter sido cortado pela função ou não... então deixando só o decode para testar...

Enfim após vários testes tive problemas com o "&" sózinho... que teimava ficar & e não &amp; hehehehe pior foi um cedilha do cão ali que tbm não conseguia ver a lógica

Sei lá... vou brincar mais um pouco e ver no que dá...

(y)

---------------------------------------

... depois de muito testar consegui resolver...

Pode até ser a coisa mais confusa do mundo, mas que deu certo, deu... e para todos os casos que testei.


<?php

function str_truncate($str, $length, $rep){

	$str = str_replace('&', '&amp;', iconv("UTF-8", "ISO-8859-1", $str));

	if(strlen($str)<=$length) return $str;

	$oc = ($rep == 0 ) ? (strrpos(substr($str,0,$length),' ')) : (strpos(substr($str,$length),' ') + $length);

	return iconv("ISO-8859-1", "UTF-8" , htmlentities(substr(str_replace('amp;', '', $str), 0, $oc), ENT_QUOTES, 'ISO-8859-1')."...");

}

$sql = mysql_query("SELECT titulo FROM tabela");

while($array = mysql_fetch_Array($sql)){

	echo str_truncate($array[0], 16, 1)."<br />";

}

?>

Uma coisa que nunca me perguntei foi o porque das constantes, já que se trabalhar só com o valor 0 ou 1 na condicional funciona perfeitamente

:ponder:

Fiz sem constantes e não deu problema... tem algum problema nisso?

(y)Até mais

#24 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 12/03/2008, 15:25

Crab, sem querer bancar o bonzão ... mas uf8-decode() não resolvia ao invés de habilar o iconv() ?

:rolleyes:

Qualquer coisa, anexa ae o seu create table e uns registros para podermos testar tambem com os seus casos ai (ok2)

[]'s

Edição feita por: savior, 12/03/2008, 15:26.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#25 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 12/03/2008, 16:40

Pode crer savior... nem pensei nele... mas como estava testando em servidor remoto e o iconv() já estava habilitado fui brincar pra aprender :D

Olha... vou preparar aqui um material que ilustra meu caso com o create que mencionou e tudo mais :D

Mas não vai ser agora não... to sempre em movimento kkkkkkkkk

Agora quero aprender a usar o imagick... logo invento outro... mas assim que der uma brecha faço sim... boto feh que possa ter soluções menos pog que a minha... pois até agora não consegui fazer sem o str_replace naquele amp; que aparece do nada kkkkkkkkkkkkkkkkkkkkk

Mas quando montar o material vou montar exatamente em cima do teste que fiz com os caracteres que usei, com o meu create table e inserts e etc... ;)

(y)Até mais

#26 Miguceamma

Miguceamma

    MiguPenjisse

  • Usuários
  • 13201 posts

Posted 22/11/2017, 22:15

Pak Dosage Vente De Cialis 5 Mg viagra Acheter Cialis 20mg Ligne Costo Cialis Generico Viagra Otc
Cheap Generic Valtrex Online Viagra E Cocaina buy levitra de como y celisborrar x 20mg Generique Acheter Levitra 36 Hour Cialis Online Cialis Duracion Efecto
Finasteride 10mg Clobetasol Best Website By Money Order Over Night affordable Cipro Without Prescriptions viagra Viagra Effetti Secondari Amoxicillin Gonorrhea Amoxicillin Sensitivity To Light Sun Exposure
Articulo 195 Acticin Best Website Without Dr Approval viagra Achat Cialis Usa Universal Propecia Amoxicillin 500mg




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq